home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1997 / MacHack 1997.toast / Hacks / Hacks ’96 / PredatorPrey / calc_contents.c < prev    next >
Text File  |  1996-06-22  |  115KB  |  3,233 lines

  1.  
  2.             /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * **/
  3.             /*                                                               */
  4.             /*                    Prototype HP15C Calculator                */
  5.             /*                    James C. Ullrey                            */
  6.             /*                    INRESCO                                    */
  7.             /*                    © 1990                                    */
  8.             /*                    Version    13.97a                            */
  9.             /*                                                               */
  10.             /*                    CONTENTS SEGMENT                           */
  11.             /*                                                               */
  12.             /*                                                            */
  13.             /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * **/
  14.  
  15.  
  16.  
  17.  
  18. /*****************************************************************/
  19. /*  I N C L U D E S
  20. /*****************************************************************/
  21.  
  22. #ifndef __C14__
  23. #include    "PredatorPrey.h"
  24. #endif
  25. #include <Quickdraw.h>
  26. #include "calc_dork.h"
  27. #include "calc_contents.h"
  28. #include "calc_update.h"
  29. #include "calc_draw_object.h"
  30. #include "ResourceDefs.h"
  31. //#include "Bremermann.h"
  32.  
  33. //#define    gray    0xFFFFFFE8
  34.  
  35. /*****************************************************************/
  36. /*  P R O T O T Y P E S
  37. /*****************************************************************/
  38.  
  39.  
  40.  
  41.  
  42.         void    deselect_objects    (WindowPtr wPtr, Boolean delete_obj);
  43.         short    point_in_object        (WObjsHandle w_objs_hndl, Point the_point, short *n);
  44.         void    select_group        (WindowPtr wPtr, Rect *selectn_rect);
  45.         Boolean do_rubber_rect        (Point old_pt, Rect *rbrband_rect);
  46.         void    grow_objects        (WindowPtr wPtr, Point mouse_pt);
  47.         void    move_objects        (WindowPtr wPtr, Point mouse_pt);
  48.         void    draw_move_frames    (WObjsHandle w_objs_hndl, 
  49.                                          Point mouse_pt, 
  50.                                          Point *net_move);
  51.         void    draw_grow_frames    (WObjsHandle w_objs_hndl, 
  52.                                          Point mouse_pt, 
  53.                                          Point *net_move);
  54.         void    size_frames            (WObjsHandle w_objs_hndl, Point frame_pt);
  55.         void    do_get_rot_text        ( WindowPtr    wPtr);
  56.         void    do_get_str_text        ( WindowPtr    wPtr);
  57.  
  58.  
  59. /*****************************************************************/
  60. /*  G L O B A L   V A R I A B L E   D E C L A R A T I O N S
  61. /*****************************************************************/
  62. extern    struct    PredDataHndl;
  63. extern    Rect        gArrow_box;
  64. extern    Rect        gCircle_box;
  65. extern    Rect        gSquare_box;
  66. extern    Rect        gCube_box;
  67. extern    Rect        gHouse_box;
  68. extern    Rect        gBackGrnd_box;
  69.  
  70. extern    Rect        gPalette_frame;
  71. extern    Rect        gRotation_frame;
  72. extern    Rect        gMovement_frame;
  73. extern    Rect        gPlaneControl_frame;
  74.  
  75. extern    Rect        gXrotation_box;
  76. extern    Rect        gYrotation_box;
  77. extern    Rect        gZrotation_box;
  78. extern    Rect        gNegXrotation_box;
  79. extern    Rect        gNegYrotation_box;
  80. extern    Rect        gNegZrotation_box;
  81.  
  82. extern    Rect        gDoManyRotation_box;
  83.  
  84. extern    Rect        gDoRotateLeft_box;
  85. extern    Rect        gDoRotateRight_box;
  86. extern    Rect        gDoRotateUp_box;
  87. extern    Rect        gDoRotateDown_box;
  88. extern    Rect        gDoMoveIn_box;
  89. extern    Rect        gDoMoveOut_box;
  90.  
  91. extern    Rect        gDoPitchUp_box;
  92. extern    Rect        gDoPitchDn_box;
  93. extern    Rect        gDoYawLft_box;
  94. extern    Rect        gDoYawRt_box;
  95. extern    Rect        gDoBankLft_box;
  96. extern    Rect        gDoBankRt_box;
  97.  
  98. extern    Rect        gXrot_text_box;
  99. extern    Rect        gYrot_text_box;
  100. extern    Rect        gZrot_text_box;
  101. extern    Rect        gRot_OK_box;
  102. extern    Rect        gRot_Cancel_box;
  103. extern    Rect        gStretch_frame;
  104. extern    Rect        gXstretch_box;
  105. extern    Rect        gYstretch_box;
  106. extern    Rect        gZstretch_box;
  107. extern    Rect        gNegXstretch_box;
  108. extern    Rect        gNegYstretch_box;
  109. extern    Rect        gNegZstretch_box;
  110. extern    Rect        gXstr_text_box;
  111. extern    Rect        gYstr_text_box;
  112. extern    Rect        gZstr_text_box;
  113. extern    Rect        gStr_OK_box;
  114. extern    Rect        gStr_Cancel_box;
  115. extern    WindowPtr    lastPtr;
  116.  
  117. /*****************************************************************/
  118. /*****************************************************************/
  119. /*
  120. /* R O U T I N E S
  121. /*
  122. /*****************************************************************/
  123. /*****************************************************************/
  124.  
  125.  
  126. void contents_seg() {}        /*  for reference in "UnloadSeg()" calls    */
  127.  
  128.  
  129.  
  130.  
  131.  
  132. /*****************************************************************/
  133. /*  D R A W  C O N T E N T S  
  134. /*****************************************************************/
  135.  
  136. /*    called from mousedown.c:HandleMouseDown()    */    
  137.     
  138. void  draw_contents(WindowPtr wPtr,EventRecord *an_event)
  139. {
  140.     short        n, find_code;
  141.     long        obj_type;
  142.     short        weapons_type;
  143.     Point        mouse_pt;
  144.     Rect        rubber_rect;
  145.     RgnHandle     saved_clip;
  146.     WObjsHandle    w_objs_hndl;
  147.     short        the_object;
  148.     Boolean        spec;
  149.     
  150.     spec = FALSE;
  151. /*********    Save the state of the machine & set up for our job here        ******/
  152.  
  153.     SetPort(wPtr);
  154.  
  155.     saved_clip = NewRgn();
  156.     GetClip(saved_clip);
  157.  
  158.     
  159.     w_objs_hndl=(WObjs**)GetWRefCon(wPtr);
  160.     the_object = (**w_objs_hndl).paletteSetting;
  161.     
  162.     
  163.  
  164.  
  165. /*************    Handle mouse-clicks in the pallette                    **********/
  166.  
  167.  
  168.     mouse_pt = an_event->where;    /*    an_event.where ?? */
  169.  
  170.     GlobalToLocal( &mouse_pt );
  171.  
  172.     if((**w_objs_hndl).isPrey || the_object == PLOT_OBJ)
  173.     {
  174.         ;    /*    do nothing    */
  175.     }
  176.     else
  177.     {
  178.         clip_4_palette(wPtr);
  179.         if( PtInRect(mouse_pt, &gPalette_frame) )
  180.         {
  181.             if(PtInRect(mouse_pt,&gArrow_box))            obj_type = ARROW_OBJ;
  182.     
  183.             else if(PtInRect(mouse_pt,&gCircle_box))    obj_type = CIRCLE_OBJ;
  184.     
  185.             else if(PtInRect(mouse_pt,&gSquare_box))    obj_type = SQUARE_OBJ;
  186.     
  187.             else if(PtInRect(mouse_pt,&gCube_box))        obj_type = CUBE_OBJ;
  188.     
  189.             else if(PtInRect(mouse_pt,&gHouse_box))        obj_type = HOUSE_OBJ;
  190.  
  191.              else if(PtInRect(mouse_pt,&gBackGrnd_box))
  192.             {
  193.                 if    (an_event->modifiers & cmdKey)    obj_type = T_BACKGRND_OBJ;
  194.                 else obj_type = BACKGRND_OBJ;    
  195.             }
  196.     
  197.             (**w_objs_hndl).paletteSetting = obj_type;
  198.             
  199.             draw_palette(wPtr);    /*    in calc_update.c    */
  200.         }
  201.  
  202.     
  203.  
  204. /*****    If not in the pallette, select object(s) or draw a new object...    ******/
  205.  
  206.  
  207.         else
  208.         {
  209.             obj_type = (**w_objs_hndl).paletteSetting;
  210.             
  211.             if(obj_type == CIRCLE_OBJ)        /*    make a circle        */
  212.             {
  213.                 deselect_objects(wPtr, FALSE);
  214.                 create_new_object(wPtr, mouse_pt, CIRCLE_OBJ);
  215.             }
  216.             
  217.             else if(obj_type == SQUARE_OBJ)    /*    make a square        */
  218.             {
  219.                 deselect_objects(wPtr, FALSE);
  220.                 create_new_object(wPtr, mouse_pt, SQUARE_OBJ);
  221.             }
  222.     
  223.             else if(obj_type == CUBE_OBJ)    /*    make a cube        */
  224.             {
  225.                 deselect_objects(wPtr, FALSE);
  226.                 create_new_object(wPtr, mouse_pt, CUBE_OBJ);    /*    this    */
  227.             }
  228.     
  229.             else if(obj_type == HOUSE_OBJ)    /*    make a house        */
  230.             {
  231.                 deselect_objects(wPtr, FALSE);
  232.                 if    (
  233.                         (an_event->modifiers & optionKey)&&
  234.                         (an_event->modifiers & controlKey)&&
  235.                         (an_event->modifiers & cmdKey)
  236.                     )    
  237.                 {
  238.                     obj_type = ARMD_HOUSE3_OBJ;                /*    guns, missles & neutron bomb    */
  239.                 }                                            /*    ARMD_HOUSE3_OBJ = 8                */
  240.                 else if    (
  241.                             (an_event->modifiers & cmdKey)&&
  242.                             (an_event->modifiers & optionKey)
  243.                         )
  244.                 {
  245.                     obj_type = ARMD_HOUSE2_OBJ;                    /*    guns & missles            */
  246.                 }                                                /*    ARMD_HOUSE2_OBJ = 9        */
  247.                 else if    (an_event->modifiers & cmdKey)
  248.                 {
  249.                     obj_type = ARMD_HOUSE1_OBJ;                    /*    guns                    */
  250.                 }                                                /*    ARMD_HOUSE1_OBJ = 10    */
  251.                 create_new_object(wPtr, mouse_pt, obj_type);    /*    this    */
  252.             }
  253.             else if(obj_type == ARMD_HOUSE3_OBJ)    /*    make an armed house with guns, missles & thermonuclear device        */
  254.             {
  255.                 deselect_objects(wPtr, FALSE);
  256.                 create_new_object(wPtr, mouse_pt, ARMD_HOUSE3_OBJ);    /*    this    */
  257.             }
  258.             else if(obj_type == ARMD_HOUSE2_OBJ)    /*    make an armed house with guns & missles        */
  259.             {
  260.                 deselect_objects(wPtr, FALSE);
  261.                 create_new_object(wPtr, mouse_pt, ARMD_HOUSE2_OBJ);    /*    this    */
  262.             }
  263.             else if(obj_type == ARMD_HOUSE1_OBJ)    /*    make an armed house with guns        */
  264.             {
  265.                 deselect_objects(wPtr, FALSE);
  266.                 create_new_object(wPtr, mouse_pt, ARMD_HOUSE1_OBJ);    /*    this    */
  267.             }
  268.             else if(obj_type == BACKGRND_OBJ)    /*    make background        */
  269.             {
  270.                 deselect_objects(wPtr, FALSE);
  271.                 if((**w_objs_hndl).hasBackGround == FALSE)
  272.                 {
  273.                     if    (an_event->modifiers & cmdKey)    obj_type = T_BACKGRND_OBJ;
  274.                     else    obj_type = BACKGRND_OBJ;            /*    T_BACKGRND_OBJ = 11    */
  275.                     create_new_object(wPtr, mouse_pt, obj_type);    /*    this    */
  276.                     (**w_objs_hndl).hasBackGround = TRUE;
  277.                 }
  278.             }
  279.             else if(obj_type == T_BACKGRND_OBJ)    /*    make background        */
  280.             {
  281.                 deselect_objects(wPtr, FALSE);
  282.                 if((**w_objs_hndl).hasBackGround == FALSE)
  283.                 {
  284.                     create_new_object(wPtr, mouse_pt, T_BACKGRND_OBJ);    /*    this    */
  285.                     (**w_objs_hndl).hasBackGround = TRUE;
  286.                 }
  287.             }
  288.             
  289.             else if(obj_type == ARROW_OBJ)    /*    select or move or grow    */
  290.             {
  291.                 find_code = point_in_object(w_objs_hndl, mouse_pt, &n);
  292.             
  293.                 if(find_code == NO_OBJ)        /* if not in an object, do rubber rectangle    */
  294.                 {
  295.                     if((an_event->modifiers & shiftKey) == 0)
  296.                                                     deselect_objects(wPtr, FALSE);
  297.                     do_rubber_rect(mouse_pt, &rubber_rect);
  298.                     select_group(wPtr, &rubber_rect);
  299.                 }
  300.             
  301.                 else  
  302.                 {            
  303.                     if(find_code == NON_SELECTED)        /* if in an object, select it */
  304.                     {
  305.                         if((an_event->modifiers & shiftKey) == 0)     /* Shift key down? */
  306.                                 deselect_objects(wPtr, FALSE);         /* no, de-select others.  */
  307.                             
  308.                         (**w_objs_hndl).object[n].selected = TRUE;    /* set this one selected   */
  309.     
  310.                         draw_object(wPtr, n, spec);                /* re-draw it "selected"   */
  311.                         move_objects(wPtr, mouse_pt);        /* allow "select & grab"   */
  312.                     }                
  313.     
  314.                     else if(find_code == GROW_BOX)            /* if in grow box, grow it    */
  315.                              grow_objects(wPtr, mouse_pt);
  316.                          
  317.                 
  318.                     else if(find_code == SELECTED)        /* if in a selected object, move it    */
  319.                             move_objects(wPtr, mouse_pt);    /*    this    */
  320.                 }
  321.             
  322.             }  /*  end of palette setting = ARROW_OBJ    */
  323.         
  324.         }
  325.         
  326.     }
  327.     
  328.  
  329.  
  330. /*********        Flag the window as "dirty"  (changed)            ************/
  331.  
  332. /***
  333.     Almost every operation through here will change the window contents,
  334.     although there are some exceptions:  a rubber-band selection that
  335.     includes no objects, a palette-click that doesn't change the tool
  336.     selection, etc.   For simplicty we always flag "dirty" but strictly
  337.     speaking it would be better to check the details...
  338. ***/
  339.  
  340.  
  341.     (**w_objs_hndl).dirty = TRUE;
  342.                 
  343.     
  344.     
  345. /*********    Restore the state of the machine                 ******************/
  346.  
  347.  
  348.     SetClip(saved_clip);
  349.     DisposeRgn(saved_clip);
  350.     
  351.     return;
  352.  
  353. }  /*  end of draw_contents()    */
  354.  
  355.  
  356.  
  357.  
  358.  
  359.  
  360. /*****************************************************************/
  361. /*  C R E A T E  N E W  O B J E C T   -   set wobjs record info & draw new objects
  362. /*****************************************************************/
  363.  
  364. /**
  365.     This routine finds an empty entry for an object in the WObjs record, sets
  366.     the contents of that entry to reflect an object of the type specified,
  367.     then calls for the object to be drawn
  368. **/
  369.     
  370.     
  371. void    create_new_object(WindowPtr wPtr,Point mouse_pt,short type)
  372. {
  373.     short        m,n,i,j,k;
  374.     short        rLeft,rTop,rRight,rBottom;
  375.     short        zBase = 0;
  376.     double_t    yy,zz;
  377.     short        xx,limit;
  378.     Point        offset;
  379.     Rect        object_rect;
  380.     WObjsHandle    w_objs_hndl;
  381.     Boolean        spec;
  382.     OSErr        iErr;
  383.     PredDataHndl    pred_hndl;
  384.     
  385.     spec = FALSE;
  386.     
  387.     w_objs_hndl = (WObjsHandle)GetWRefCon(wPtr);
  388.     offset      = (**w_objs_hndl).scrollAmount;
  389.     
  390.     if(type != BACKGRND_OBJ)        /*    BACKGRND_OBJ = 7    */
  391.     {
  392.         if(type != T_BACKGRND_OBJ)    /*    T_BACKGRND_OBJ = 11    */
  393.         {
  394.             n = 0;
  395.             while ( ((**w_objs_hndl).object[n].type != NO_OBJ) && (n < MAX_OBJECTS)) n++;
  396.             
  397.             if (n >= MAX_OBJECTS)  return;            /*  no room....    */
  398.         }
  399.         else n = MAX_OBJECTS + 2;        /*    MAX_OBJECTS = 30    */
  400.     }
  401.     else n = MAX_OBJECTS + 2;        /*    MAX_OBJECTS = 30    */
  402.             
  403.     if(type == HOUSE_OBJ)
  404.     {
  405.         if ((mouse_pt.h < HSE_OBJ_SIZE)                 /*    HSE_OBJ_SIZE = 40    */
  406.          || (mouse_pt.h > (**w_objs_hndl).hDocLimit - HSE_OBJ_SIZE - offset.h)
  407.          || (mouse_pt.v < HSE_OBJ_SIZE)
  408.          || (mouse_pt.v > (**w_objs_hndl).vDocLimit - HSE_OBJ_SIZE - offset.v))  return;
  409.          /*    if click point would cause the house to be drawn overlapping the boundry, don't draw it    */
  410.     }
  411.     if(type == ARMD_HOUSE3_OBJ || type == ARMD_HOUSE2_OBJ || type == ARMD_HOUSE1_OBJ )
  412.     {
  413.         if ((mouse_pt.h < A_HSE_OBJ_SIZE)                 /*    A_HSE_OBJ_SIZE = 40    */
  414.          || (mouse_pt.h > (**w_objs_hndl).hDocLimit - A_HSE_OBJ_SIZE - offset.h)
  415.          || (mouse_pt.v < A_HSE_OBJ_SIZE)
  416.          || (mouse_pt.v > (**w_objs_hndl).vDocLimit - A_HSE_OBJ_SIZE - offset.v))  return;
  417.          /*    if click point would cause the house to be drawn overlapping the boundry, don't draw it    */
  418.     }
  419.     else if(type == BACKGRND_OBJ)        /*    7    */
  420.     {
  421.         ;
  422.     }
  423.     else if(type == T_BACKGRND_OBJ)        /*    11    */
  424.     {
  425.         ;
  426.     }
  427.     else
  428.     {
  429.         if ((mouse_pt.h < OBJECT_SIZE) 
  430.          || (mouse_pt.h > (**w_objs_hndl).hDocLimit - OBJECT_SIZE - offset.h)
  431.          || (mouse_pt.v < OBJECT_SIZE)
  432.          || (mouse_pt.v > (**w_objs_hndl).vDocLimit - OBJECT_SIZE - offset.v))  return;
  433.     }
  434.     
  435.     if(type == HOUSE_OBJ)                /*    5    */
  436.     {
  437.         (**w_objs_hndl).object[n].armed = FALSE;
  438.         rLeft    = offset.h + mouse_pt.h - HSE_OBJ_SIZE;
  439.         rTop    = offset.v + mouse_pt.v - HSE_OBJ_SIZE;
  440.         rRight    = offset.h + mouse_pt.h + HSE_OBJ_SIZE;
  441.         rBottom    = offset.v + mouse_pt.v + HSE_OBJ_SIZE;
  442.     }
  443.     else if(type == BACKGRND_OBJ)
  444.     {
  445.         ;
  446.     }
  447.     else if(type == T_BACKGRND_OBJ)
  448.     {
  449.         (**w_objs_hndl).hasTargets = TRUE;
  450.         (**w_objs_hndl).targets_left = 6;
  451.         if((**w_objs_hndl).isPrey == 1)    ;    else    draw_palette(wPtr);
  452.     }
  453.     else if(type == ARMD_HOUSE3_OBJ || type == ARMD_HOUSE2_OBJ || type == ARMD_HOUSE1_OBJ )
  454.     {
  455.         if((**w_objs_hndl).isArmed == TRUE) return;
  456.         else
  457.         {
  458.             (**w_objs_hndl).isArmed = TRUE;
  459.             (**w_objs_hndl).object[n].armed = TRUE;
  460.             (**w_objs_hndl).object[n].missles = 14;
  461.             for(i = 0;i<=9;i++)
  462.             {
  463.                 (**w_objs_hndl).object[n].sndStruct[i].Chan00 =  (SndChannelPtr)NewPtrClear(sizeof(SndChannel));
  464.                 if((**w_objs_hndl).object[n].sndStruct[i].Chan00 != nil)
  465.                 {
  466.                     (**w_objs_hndl).object[n].sndStruct[i].Chan00->qLength = stdQLength;
  467.                     iErr = SndNewChannel(&(**w_objs_hndl).object[n].sndStruct[i].Chan00,sampledSynth,initMono,nil);
  468.                 }
  469.             }
  470.             switch(type)
  471.             {
  472.                 case ARMD_HOUSE3_OBJ:            /*    8    */
  473.                     (**w_objs_hndl).armament_type = 2;    /*    guns, missles & thermonuclear device    */
  474.                     break;
  475.                 case ARMD_HOUSE2_OBJ:            /*    9    */
  476.                     (**w_objs_hndl).armament_type = 1;    /*    guns & missles    */
  477.                     break;
  478.                 case ARMD_HOUSE1_OBJ:            /*    10    */
  479.                     (**w_objs_hndl).armament_type = 0;    /*    guns    */
  480.                     break;
  481.             }
  482.             (**w_objs_hndl).arms_selected = 0;
  483.             draw_palette(wPtr);    /*    in calc_update.c    */
  484.             type = HOUSE_OBJ;
  485.             rLeft    = offset.h + mouse_pt.h - HSE_OBJ_SIZE;
  486.             rTop    = offset.v + mouse_pt.v - HSE_OBJ_SIZE;
  487.             rRight    = offset.h + mouse_pt.h + HSE_OBJ_SIZE;
  488.             rBottom    = offset.v + mouse_pt.v + HSE_OBJ_SIZE;
  489.         }
  490.     }
  491.     else if(type == BARBIE)                        /*    12    */
  492.     {
  493.         //    set object size for Barbie
  494.     }
  495.     else if(type == KEN)                        /*    13    */
  496.     {
  497.         //    set object size for Ken
  498.         rLeft    = offset.h + mouse_pt.h - OBJECT_SIZE;        /*    OBJECT_SIZE    = 25    */
  499.         rTop    = offset.v + mouse_pt.v - OBJECT_SIZE;
  500.         rRight    = offset.h + mouse_pt.h + OBJECT_SIZE;
  501.         rBottom    = offset.v + mouse_pt.v + OBJECT_SIZE;
  502.  
  503.     }
  504.     else
  505.     {
  506.         rLeft    = offset.h + mouse_pt.h - OBJECT_SIZE;        /*    OBJECT_SIZE    = 25    */
  507.         rTop    = offset.v + mouse_pt.v - OBJECT_SIZE;
  508.         rRight    = offset.h + mouse_pt.h + OBJECT_SIZE;
  509.         rBottom    = offset.v + mouse_pt.v + OBJECT_SIZE;
  510.     }
  511.     
  512.     if(type != BACKGRND_OBJ)
  513.     {
  514.         if(type != T_BACKGRND_OBJ)
  515.         {
  516.             SetRect(&object_rect, rLeft, rTop, rRight+1, rBottom+1);
  517.             (**w_objs_hndl).object[n].type = type;
  518.             (**w_objs_hndl).object[n].bounds = object_rect;
  519.             (**w_objs_hndl).object[n].selected = TRUE;
  520.         }
  521.     }
  522.     
  523.     if(type == CUBE_OBJ)
  524.     {
  525.         for(i = 0; i <=7; i++)
  526.         {
  527.             (**w_objs_hndl).object[n]._3dPt[i].no_point = 1;
  528.         }
  529.         
  530.         /************* set vertices *************/
  531.         
  532.         (**w_objs_hndl).object[n]._3dPt[0].x_point = rLeft;
  533.         (**w_objs_hndl).object[n]._3dPt[0].y_point = rTop;
  534.         (**w_objs_hndl).object[n]._3dPt[0].z_point = zBase - OBJECT_SIZE;
  535.         
  536.         (**w_objs_hndl).object[n]._3dPt[1].x_point = rRight;
  537.         (**w_objs_hndl).object[n]._3dPt[1].y_point = rTop;
  538.         (**w_objs_hndl).object[n]._3dPt[1].z_point = zBase - OBJECT_SIZE;
  539.         
  540.         (**w_objs_hndl).object[n]._3dPt[2].x_point = rRight;
  541.         (**w_objs_hndl).object[n]._3dPt[2].y_point = rBottom;
  542.         (**w_objs_hndl).object[n]._3dPt[2].z_point = zBase - OBJECT_SIZE;
  543.  
  544.         (**w_objs_hndl).object[n]._3dPt[3].x_point = rLeft;
  545.         (**w_objs_hndl).object[n]._3dPt[3].y_point = rBottom;
  546.         (**w_objs_hndl).object[n]._3dPt[3].z_point = zBase - OBJECT_SIZE;
  547.  
  548.         (**w_objs_hndl).object[n]._3dPt[4].x_point = rLeft;
  549.         (**w_objs_hndl).object[n]._3dPt[4].y_point = rTop;
  550.         (**w_objs_hndl).object[n]._3dPt[4].z_point = zBase + OBJECT_SIZE;
  551.  
  552.         (**w_objs_hndl).object[n]._3dPt[5].x_point = rRight;
  553.         (**w_objs_hndl).object[n]._3dPt[5].y_point = rTop;
  554.         (**w_objs_hndl).object[n]._3dPt[5].z_point = zBase + OBJECT_SIZE;
  555.  
  556.         (**w_objs_hndl).object[n]._3dPt[6].x_point = rRight;
  557.         (**w_objs_hndl).object[n]._3dPt[6].y_point = rBottom;
  558.         (**w_objs_hndl).object[n]._3dPt[6].z_point = zBase + OBJECT_SIZE;
  559.  
  560.         (**w_objs_hndl).object[n]._3dPt[7].x_point = rLeft;
  561.         (**w_objs_hndl).object[n]._3dPt[7].y_point = rBottom;
  562.         (**w_objs_hndl).object[n]._3dPt[7].z_point = zBase + OBJECT_SIZE;
  563.  
  564.         /****** set vertices for posterity ******/
  565.         
  566.         (**w_objs_hndl).object[n]._3dPtH[0].x_point = rLeft;
  567.         (**w_objs_hndl).object[n]._3dPtH[0].y_point = rTop;
  568.         (**w_objs_hndl).object[n]._3dPtH[0].z_point = zBase - OBJECT_SIZE;
  569.         
  570.         (**w_objs_hndl).object[n]._3dPtH[1].x_point = rRight;
  571.         (**w_objs_hndl).object[n]._3dPtH[1].y_point = rTop;
  572.         (**w_objs_hndl).object[n]._3dPtH[1].z_point = zBase - OBJECT_SIZE;
  573.         
  574.         (**w_objs_hndl).object[n]._3dPtH[2].x_point = rRight;
  575.         (**w_objs_hndl).object[n]._3dPtH[2].y_point = rBottom;
  576.         (**w_objs_hndl).object[n]._3dPtH[2].z_point = zBase - OBJECT_SIZE;
  577.  
  578.         (**w_objs_hndl).object[n]._3dPtH[3].x_point = rLeft;
  579.         (**w_objs_hndl).object[n]._3dPtH[3].y_point = rBottom;
  580.         (**w_objs_hndl).object[n]._3dPtH[3].z_point = zBase - OBJECT_SIZE;
  581.  
  582.         (**w_objs_hndl).object[n]._3dPtH[4].x_point = rLeft;
  583.         (**w_objs_hndl).object[n]._3dPtH[4].y_point = rTop;
  584.         (**w_objs_hndl).object[n]._3dPtH[4].z_point = zBase + OBJECT_SIZE;
  585.  
  586.         (**w_objs_hndl).object[n]._3dPtH[5].x_point = rRight;
  587.         (**w_objs_hndl).object[n]._3dPtH[5].y_point = rTop;
  588.         (**w_objs_hndl).object[n]._3dPtH[5].z_point = zBase + OBJECT_SIZE;
  589.  
  590.         (**w_objs_hndl).object[n]._3dPtH[6].x_point = rRight;
  591.         (**w_objs_hndl).object[n]._3dPtH[6].y_point = rBottom;
  592.         (**w_objs_hndl).object[n]._3dPtH[6].z_point = zBase + OBJECT_SIZE;
  593.  
  594.         (**w_objs_hndl).object[n]._3dPtH[7].x_point = rLeft;
  595.         (**w_objs_hndl).object[n]._3dPtH[7].y_point = rBottom;
  596.         (**w_objs_hndl).object[n]._3dPtH[7].z_point = zBase + OBJECT_SIZE;
  597.  
  598.         /** initialize rotation history matrix **/
  599.  
  600.         for(i = 0;i <=3;i++)
  601.         {
  602.             for(j = 0;j <= 3;j++)
  603.             {
  604.                 if(i == j)
  605.                 {
  606.                     (**w_objs_hndl).object[n].rotHist[i][j].rotElem = 1;
  607.                 }
  608.                 else
  609.                 {
  610.                     (**w_objs_hndl).object[n].rotHist[i][j].rotElem = 0;
  611.                 }    
  612.             }
  613.         }
  614.     }
  615.     else    if(type == KEN)
  616.     {
  617. /*        for(i = 0; i <= 38; i++)*/
  618. /*        {*/
  619. /*            (**w_objs_hndl).object[n]._3dPt[i].no_point = 1;*/
  620. /*        }*/
  621. /*        /************* set vertices ************»*/
  622. /*        */
  623. /*        (**w_objs_hndl).object[n]._3dPt[0].x_point = rLeft;*/
  624. /*        (**w_objs_hndl).object[n]._3dPt[0].y_point = rBottom;*/
  625. /*        (**w_objs_hndl).object[n]._3dPt[0].z_point = zBase - HSE_OBJ_SIZE - 5;*/
  626. /*        */
  627. /*        (**w_objs_hndl).object[n]._3dPt[1].x_point = rLeft;*/
  628. /*        (**w_objs_hndl).object[n]._3dPt[1].y_point = rBottom - 50;*/
  629. /*        (**w_objs_hndl).object[n]._3dPt[1].z_point = zBase - HSE_OBJ_SIZE - 5;*/
  630. /*        */
  631. /*        (**w_objs_hndl).object[n]._3dPt[2].x_point = offset.h + mouse_pt.h;*/
  632. /*        (**w_objs_hndl).object[n]._3dPt[2].y_point = rTop;*/
  633. /*        (**w_objs_hndl).object[n]._3dPt[2].z_point = zBase - HSE_OBJ_SIZE - 5;*/
  634. /**/
  635. /*        (**w_objs_hndl).object[n]._3dPt[3].x_point = rRight;*/
  636. /*        (**w_objs_hndl).object[n]._3dPt[3].y_point = rBottom - 50;*/
  637. /*        (**w_objs_hndl).object[n]._3dPt[3].z_point = zBase - HSE_OBJ_SIZE - 5;*/
  638. /**/
  639. /*        (**w_objs_hndl).object[n]._3dPt[4].x_point = rRight;*/
  640. /*        (**w_objs_hndl).object[n]._3dPt[4].y_point = rBottom;*/
  641. /*        (**w_objs_hndl).object[n]._3dPt[4].z_point = zBase - HSE_OBJ_SIZE - 5;*/
  642. /**/
  643. /*        (**w_objs_hndl).object[n]._3dPt[5].x_point = offset.h + mouse_pt.h + 10;*/
  644. /*        (**w_objs_hndl).object[n]._3dPt[5].y_point = rBottom;*/
  645. /*        (**w_objs_hndl).object[n]._3dPt[5].z_point = zBase - HSE_OBJ_SIZE - 5;*/
  646. /**/
  647. /*        (**w_objs_hndl).object[n]._3dPt[6].x_point = offset.h + mouse_pt.h + 10;*/
  648. /*        (**w_objs_hndl).object[n]._3dPt[6].y_point = rBottom - 35;*/
  649. /*        (**w_objs_hndl).object[n]._3dPt[6].z_point = zBase - HSE_OBJ_SIZE - 5;*/
  650. /**/
  651. /*        (**w_objs_hndl).object[n]._3dPt[7].x_point = offset.h + mouse_pt.h - 10;*/
  652. /*        (**w_objs_hndl).object[n]._3dPt[7].y_point = rBottom - 35;*/
  653. /*        (**w_objs_hndl).object[n]._3dPt[7].z_point = zBase - HSE_OBJ_SIZE - 5;*/
  654. /**/
  655. /*        (**w_objs_hndl).object[n]._3dPt[8].x_point = offset.h + mouse_pt.h - 10;*/
  656. /*        (**w_objs_hndl).object[n]._3dPt[8].y_point = rBottom;*/
  657. /*        (**w_objs_hndl).object[n]._3dPt[8].z_point = zBase - HSE_OBJ_SIZE - 5;*/
  658. /**/
  659. /*        (**w_objs_hndl).object[n]._3dPt[9].x_point = rLeft;*/
  660. /*        (**w_objs_hndl).object[n]._3dPt[9].y_point = rBottom;*/
  661. /*        (**w_objs_hndl).object[n]._3dPt[9].z_point = zBase + HSE_OBJ_SIZE + 5;*/
  662. /**/
  663. /*        (**w_objs_hndl).object[n]._3dPt[10].x_point = rLeft;*/
  664. /*        (**w_objs_hndl).object[n]._3dPt[10].y_point = rBottom - 50;*/
  665. /*        (**w_objs_hndl).object[n]._3dPt[10].z_point = zBase + HSE_OBJ_SIZE + 5;*/
  666. /**/
  667. /*        (**w_objs_hndl).object[n]._3dPt[11].x_point = offset.h + mouse_pt.h;*/
  668. /*        (**w_objs_hndl).object[n]._3dPt[11].y_point = rTop;*/
  669. /*        (**w_objs_hndl).object[n]._3dPt[11].z_point = zBase + HSE_OBJ_SIZE + 5;*/
  670. /**/
  671. /*        (**w_objs_hndl).object[n]._3dPt[12].x_point = rRight;*/
  672. /*        (**w_objs_hndl).object[n]._3dPt[12].y_point = rBottom - 50;*/
  673. /*        (**w_objs_hndl).object[n]._3dPt[12].z_point = zBase + HSE_OBJ_SIZE + 5;*/
  674. /**/
  675. /*        (**w_objs_hndl).object[n]._3dPt[13].x_point = rRight;*/
  676. /*        (**w_objs_hndl).object[n]._3dPt[13].y_point = rBottom;*/
  677. /*        (**w_objs_hndl).object[n]._3dPt[13].z_point = zBase + HSE_OBJ_SIZE + 5;*/
  678. /**/
  679. /*        (**w_objs_hndl).object[n]._3dPt[14].x_point = rLeft;*/
  680. /*        (**w_objs_hndl).object[n]._3dPt[14].y_point = rBottom - 15;*/
  681. /*        (**w_objs_hndl).object[n]._3dPt[14].z_point = zBase - 25;*/
  682. /**/
  683. /*        (**w_objs_hndl).object[n]._3dPt[15].x_point = rLeft;*/
  684. /*        (**w_objs_hndl).object[n]._3dPt[15].y_point = rBottom - 30;*/
  685. /*        (**w_objs_hndl).object[n]._3dPt[15].z_point = zBase - 25;*/
  686. /**/
  687. /*        (**w_objs_hndl).object[n]._3dPt[16].x_point = rLeft;*/
  688. /*        (**w_objs_hndl).object[n]._3dPt[16].y_point = rBottom - 30;*/
  689. /*        (**w_objs_hndl).object[n]._3dPt[16].z_point = zBase + 15;*/
  690. /**/
  691. /*        (**w_objs_hndl).object[n]._3dPt[17].x_point = rLeft;*/
  692. /*        (**w_objs_hndl).object[n]._3dPt[17].y_point = rBottom - 15;*/
  693. /*        (**w_objs_hndl).object[n]._3dPt[17].z_point = zBase + 15;*/
  694. /**/
  695. /*        (**w_objs_hndl).object[n]._3dPt[18].x_point = offset.h + mouse_pt.h - 10;*/
  696. /*        (**w_objs_hndl).object[n]._3dPt[18].y_point = rBottom - 40;*/
  697. /*        (**w_objs_hndl).object[n]._3dPt[18].z_point = zBase - HSE_OBJ_SIZE - 5;*/
  698. /**/
  699. /*        (**w_objs_hndl).object[n]._3dPt[19].x_point = offset.h + mouse_pt.h - 10;*/
  700. /*        (**w_objs_hndl).object[n]._3dPt[19].y_point = rBottom - 45;*/
  701. /*        (**w_objs_hndl).object[n]._3dPt[19].z_point = zBase - HSE_OBJ_SIZE - 5;*/
  702. /**/
  703. /*        (**w_objs_hndl).object[n]._3dPt[20].x_point = offset.h + mouse_pt.h - 15;*/
  704. /*        (**w_objs_hndl).object[n]._3dPt[20].y_point = rBottom - 35;*/
  705. /*        (**w_objs_hndl).object[n]._3dPt[20].z_point = zBase - HSE_OBJ_SIZE - 5;*/
  706. /**/
  707. /*        (**w_objs_hndl).object[n]._3dPt[21].x_point = offset.h + mouse_pt.h - 20;*/
  708. /*        (**w_objs_hndl).object[n]._3dPt[21].y_point = rBottom - 35;*/
  709. /*        (**w_objs_hndl).object[n]._3dPt[21].z_point = zBase - HSE_OBJ_SIZE - 5;*/
  710. /**/
  711. /*        (**w_objs_hndl).object[n]._3dPt[22].x_point = rRight;*/
  712. /*        (**w_objs_hndl).object[n]._3dPt[22].y_point = rBottom - 50;*/
  713. /*        (**w_objs_hndl).object[n]._3dPt[22].z_point = zBase + HSE_OBJ_SIZE + 5;*/
  714. /**/
  715. /*        (**w_objs_hndl).object[n]._3dPt[23].x_point = rRight;*/
  716. /*        (**w_objs_hndl).object[n]._3dPt[23].y_point = rBottom;*/
  717. /*        (**w_objs_hndl).object[n]._3dPt[23].z_point = zBase + HSE_OBJ_SIZE + 5;*/
  718. /**/
  719. /*        (**w_objs_hndl).object[n]._3dPt[24].x_point = rLeft;*/
  720. /*        (**w_objs_hndl).object[n]._3dPt[24].y_point = rBottom - 15;*/
  721. /*        (**w_objs_hndl).object[n]._3dPt[24].z_point = zBase - 25;*/
  722. /**/
  723. /*        (**w_objs_hndl).object[n]._3dPt[25].x_point = rLeft;*/
  724. /*        (**w_objs_hndl).object[n]._3dPt[25].y_point = rBottom - 30;*/
  725. /*        (**w_objs_hndl).object[n]._3dPt[25].z_point = zBase - 25;*/
  726. /**/
  727. /*        (**w_objs_hndl).object[n]._3dPt[26].x_point = rLeft;*/
  728. /*        (**w_objs_hndl).object[n]._3dPt[26].y_point = rBottom - 30;*/
  729. /*        (**w_objs_hndl).object[n]._3dPt[26].z_point = zBase + 15;*/
  730. /**/
  731. /*        (**w_objs_hndl).object[n]._3dPt[27].x_point = rLeft;*/
  732. /*        (**w_objs_hndl).object[n]._3dPt[27].y_point = rBottom - 15;*/
  733. /*        (**w_objs_hndl).object[n]._3dPt[27].z_point = zBase + 15;*/
  734. /**/
  735. /*        (**w_objs_hndl).object[n]._3dPt[28].x_point = offset.h + mouse_pt.h - 10;*/
  736. /*        (**w_objs_hndl).object[n]._3dPt[28].y_point = rBottom - 40;*/
  737. /*        (**w_objs_hndl).object[n]._3dPt[28].z_point = zBase - HSE_OBJ_SIZE - 5;*/
  738. /**/
  739. /*        (**w_objs_hndl).object[n]._3dPt[29].x_point = offset.h + mouse_pt.h - 10;*/
  740. /*        (**w_objs_hndl).object[n]._3dPt[29].y_point = rBottom - 45;*/
  741. /*        (**w_objs_hndl).object[n]._3dPt[29].z_point = zBase - HSE_OBJ_SIZE - 5;*/
  742. /**/
  743. /*        (**w_objs_hndl).object[n]._3dPt[30].x_point = offset.h + mouse_pt.h - 15;*/
  744. /*        (**w_objs_hndl).object[n]._3dPt[30].y_point = rBottom - 35;*/
  745. /*        (**w_objs_hndl).object[n]._3dPt[30].z_point = zBase - HSE_OBJ_SIZE - 5;*/
  746. /**/
  747. /*        (**w_objs_hndl).object[n]._3dPt[31].x_point = offset.h + mouse_pt.h - 20;*/
  748. /*        (**w_objs_hndl).object[n]._3dPt[31].y_point = rBottom - 35;*/
  749. /*        (**w_objs_hndl).object[n]._3dPt[31].z_point = zBase - HSE_OBJ_SIZE - 5;*/
  750. /**/
  751. /*        (**w_objs_hndl).object[n]._3dPt[32].x_point = rRight;*/
  752. /*        (**w_objs_hndl).object[n]._3dPt[32].y_point = rBottom - 50;*/
  753. /*        (**w_objs_hndl).object[n]._3dPt[32].z_point = zBase + HSE_OBJ_SIZE + 5;*/
  754. /**/
  755. /*        (**w_objs_hndl).object[n]._3dPt[33].x_point = rRight;*/
  756. /*        (**w_objs_hndl).object[n]._3dPt[33].y_point = rBottom;*/
  757. /*        (**w_objs_hndl).object[n]._3dPt[33].z_point = zBase + HSE_OBJ_SIZE + 5;*/
  758. /**/
  759. /*        (**w_objs_hndl).object[n]._3dPt[34].x_point = rLeft;*/
  760. /*        (**w_objs_hndl).object[n]._3dPt[34].y_point = rBottom - 15;*/
  761. /*        (**w_objs_hndl).object[n]._3dPt[34].z_point = zBase - 25;*/
  762. /**/
  763. /*        (**w_objs_hndl).object[n]._3dPt[35].x_point = rLeft;*/
  764. /*        (**w_objs_hndl).object[n]._3dPt[35].y_point = rBottom - 30;*/
  765. /*        (**w_objs_hndl).object[n]._3dPt[35].z_point = zBase - 25;*/
  766. /**/
  767. /*        (**w_objs_hndl).object[n]._3dPt[36].x_point = rLeft;*/
  768. /*        (**w_objs_hndl).object[n]._3dPt[36].y_point = rBottom - 30;*/
  769. /*        (**w_objs_hndl).object[n]._3dPt[36].z_point = zBase + 15;*/
  770. /**/
  771. /*        (**w_objs_hndl).object[n]._3dPt[37].x_point = rLeft;*/
  772. /*        (**w_objs_hndl).object[n]._3dPt[37].y_point = rBottom - 15;*/
  773. /*        (**w_objs_hndl).object[n]._3dPt[37].z_point = zBase + 15;*/
  774. /**/
  775. /*        (**w_objs_hndl).object[n]._3dPt[38].x_point = offset.h + mouse_pt.h - 10;*/
  776. /*        (**w_objs_hndl).object[n]._3dPt[38].y_point = rBottom - 40;*/
  777. /*        (**w_objs_hndl).object[n]._3dPt[38].z_point = zBase - HSE_OBJ_SIZE - 5;*/
  778. /**/
  779. /*        /****** set vertices for posterity *****»*/
  780. /*        */
  781. /**/
  782. /*        /** initialize rotation history matrix *»*/
  783. /**/
  784. /*        for(i = 0;i <=3;i++)*/
  785. /*        {*/
  786. /*            for(j = 0;j <= 3;j++)*/
  787. /*            {*/
  788. /*                if(i == j)*/
  789. /*                {*/
  790. /*                    (**w_objs_hndl).object[n].rotHist[i][j].rotElem = 1;*/
  791. /*                }*/
  792. /*                else*/
  793. /*                {*/
  794. /*                    (**w_objs_hndl).object[n].rotHist[i][j].rotElem = 0;*/
  795. /*                }    */
  796. /*            }*/
  797. /*        }    */
  798.     }
  799.     else if( type == HOUSE_OBJ )
  800.     {
  801.         for(i = 0; i <= 21; i++)
  802.         {
  803.             (**w_objs_hndl).object[n]._3dPt[i].no_point = 1;
  804.         }
  805.         /************* set vertices *************/
  806.         
  807.         (**w_objs_hndl).object[n]._3dPt[0].x_point = rLeft;
  808.         (**w_objs_hndl).object[n]._3dPt[0].y_point = rBottom;
  809.         (**w_objs_hndl).object[n]._3dPt[0].z_point = zBase - HSE_OBJ_SIZE - 5;
  810.         
  811.         (**w_objs_hndl).object[n]._3dPt[1].x_point = rLeft;
  812.         (**w_objs_hndl).object[n]._3dPt[1].y_point = rBottom - 50;
  813.         (**w_objs_hndl).object[n]._3dPt[1].z_point = zBase - HSE_OBJ_SIZE - 5;
  814.         
  815.         (**w_objs_hndl).object[n]._3dPt[2].x_point = offset.h + mouse_pt.h;
  816.         (**w_objs_hndl).object[n]._3dPt[2].y_point = rTop;
  817.         (**w_objs_hndl).object[n]._3dPt[2].z_point = zBase - HSE_OBJ_SIZE - 5;
  818.  
  819.         (**w_objs_hndl).object[n]._3dPt[3].x_point = rRight;
  820.         (**w_objs_hndl).object[n]._3dPt[3].y_point = rBottom - 50;
  821.         (**w_objs_hndl).object[n]._3dPt[3].z_point = zBase - HSE_OBJ_SIZE - 5;
  822.  
  823.         (**w_objs_hndl).object[n]._3dPt[4].x_point = rRight;
  824.         (**w_objs_hndl).object[n]._3dPt[4].y_point = rBottom;
  825.         (**w_objs_hndl).object[n]._3dPt[4].z_point = zBase - HSE_OBJ_SIZE - 5;
  826.  
  827.         (**w_objs_hndl).object[n]._3dPt[5].x_point = offset.h + mouse_pt.h + 10;
  828.         (**w_objs_hndl).object[n]._3dPt[5].y_point = rBottom;
  829.         (**w_objs_hndl).object[n]._3dPt[5].z_point = zBase - HSE_OBJ_SIZE - 5;
  830.  
  831.         (**w_objs_hndl).object[n]._3dPt[6].x_point = offset.h + mouse_pt.h + 10;
  832.         (**w_objs_hndl).object[n]._3dPt[6].y_point = rBottom - 35;
  833.         (**w_objs_hndl).object[n]._3dPt[6].z_point = zBase - HSE_OBJ_SIZE - 5;
  834.  
  835.         (**w_objs_hndl).object[n]._3dPt[7].x_point = offset.h + mouse_pt.h - 10;
  836.         (**w_objs_hndl).object[n]._3dPt[7].y_point = rBottom - 35;
  837.         (**w_objs_hndl).object[n]._3dPt[7].z_point = zBase - HSE_OBJ_SIZE - 5;
  838.  
  839.         (**w_objs_hndl).object[n]._3dPt[8].x_point = offset.h + mouse_pt.h - 10;
  840.         (**w_objs_hndl).object[n]._3dPt[8].y_point = rBottom;
  841.         (**w_objs_hndl).object[n]._3dPt[8].z_point = zBase - HSE_OBJ_SIZE - 5;
  842.  
  843.         (**w_objs_hndl).object[n]._3dPt[9].x_point = rLeft;
  844.         (**w_objs_hndl).object[n]._3dPt[9].y_point = rBottom;
  845.         (**w_objs_hndl).object[n]._3dPt[9].z_point = zBase + HSE_OBJ_SIZE + 5;
  846.  
  847.         (**w_objs_hndl).object[n]._3dPt[10].x_point = rLeft;
  848.         (**w_objs_hndl).object[n]._3dPt[10].y_point = rBottom - 50;
  849.         (**w_objs_hndl).object[n]._3dPt[10].z_point = zBase + HSE_OBJ_SIZE + 5;
  850.  
  851.         (**w_objs_hndl).object[n]._3dPt[11].x_point = offset.h + mouse_pt.h;
  852.         (**w_objs_hndl).object[n]._3dPt[11].y_point = rTop;
  853.         (**w_objs_hndl).object[n]._3dPt[11].z_point = zBase + HSE_OBJ_SIZE + 5;
  854.  
  855.         (**w_objs_hndl).object[n]._3dPt[12].x_point = rRight;
  856.         (**w_objs_hndl).object[n]._3dPt[12].y_point = rBottom - 50;
  857.         (**w_objs_hndl).object[n]._3dPt[12].z_point = zBase + HSE_OBJ_SIZE + 5;
  858.  
  859.         (**w_objs_hndl).object[n]._3dPt[13].x_point = rRight;
  860.         (**w_objs_hndl).object[n]._3dPt[13].y_point = rBottom;
  861.         (**w_objs_hndl).object[n]._3dPt[13].z_point = zBase + HSE_OBJ_SIZE + 5;
  862.  
  863.         (**w_objs_hndl).object[n]._3dPt[14].x_point = rLeft;
  864.         (**w_objs_hndl).object[n]._3dPt[14].y_point = rBottom - 15;
  865.         (**w_objs_hndl).object[n]._3dPt[14].z_point = zBase - 25;
  866.  
  867.         (**w_objs_hndl).object[n]._3dPt[15].x_point = rLeft;
  868.         (**w_objs_hndl).object[n]._3dPt[15].y_point = rBottom - 30;
  869.         (**w_objs_hndl).object[n]._3dPt[15].z_point = zBase - 25;
  870.  
  871.         (**w_objs_hndl).object[n]._3dPt[16].x_point = rLeft;
  872.         (**w_objs_hndl).object[n]._3dPt[16].y_point = rBottom - 30;
  873.         (**w_objs_hndl).object[n]._3dPt[16].z_point = zBase + 15;
  874.  
  875.         (**w_objs_hndl).object[n]._3dPt[17].x_point = rLeft;
  876.         (**w_objs_hndl).object[n]._3dPt[17].y_point = rBottom - 15;
  877.         (**w_objs_hndl).object[n]._3dPt[17].z_point = zBase + 15;
  878.  
  879.         (**w_objs_hndl).object[n]._3dPt[18].x_point = offset.h + mouse_pt.h - 10;
  880.         (**w_objs_hndl).object[n]._3dPt[18].y_point = rBottom - 40;
  881.         (**w_objs_hndl).object[n]._3dPt[18].z_point = zBase - HSE_OBJ_SIZE - 5;
  882.  
  883.         (**w_objs_hndl).object[n]._3dPt[19].x_point = offset.h + mouse_pt.h - 10;
  884.         (**w_objs_hndl).object[n]._3dPt[19].y_point = rBottom - 45;
  885.         (**w_objs_hndl).object[n]._3dPt[19].z_point = zBase - HSE_OBJ_SIZE - 5;
  886.  
  887.         (**w_objs_hndl).object[n]._3dPt[20].x_point = offset.h + mouse_pt.h - 15;
  888.         (**w_objs_hndl).object[n]._3dPt[20].y_point = rBottom - 35;
  889.         (**w_objs_hndl).object[n]._3dPt[20].z_point = zBase - HSE_OBJ_SIZE - 5;
  890.  
  891.         (**w_objs_hndl).object[n]._3dPt[21].x_point = offset.h + mouse_pt.h - 20;
  892.         (**w_objs_hndl).object[n]._3dPt[21].y_point = rBottom - 35;
  893.         (**w_objs_hndl).object[n]._3dPt[21].z_point = zBase - HSE_OBJ_SIZE - 5;
  894.  
  895.         /****** set vertices for posterity ******/
  896.         
  897.         (**w_objs_hndl).object[n]._3dPtH[0].x_point = rLeft;
  898.         (**w_objs_hndl).object[n]._3dPtH[0].y_point = rBottom;
  899.         (**w_objs_hndl).object[n]._3dPtH[0].z_point = zBase - HSE_OBJ_SIZE - 5;
  900.         
  901.         (**w_objs_hndl).object[n]._3dPtH[1].x_point = rLeft;
  902.         (**w_objs_hndl).object[n]._3dPtH[1].y_point = rBottom - 50;
  903.         (**w_objs_hndl).object[n]._3dPtH[1].z_point = zBase - HSE_OBJ_SIZE - 5;
  904.         
  905.         (**w_objs_hndl).object[n]._3dPtH[2].x_point = offset.h + mouse_pt.h;
  906.         (**w_objs_hndl).object[n]._3dPtH[2].y_point = rTop;
  907.         (**w_objs_hndl).object[n]._3dPtH[2].z_point = zBase - HSE_OBJ_SIZE - 5;
  908.  
  909.         (**w_objs_hndl).object[n]._3dPtH[3].x_point = rRight;
  910.         (**w_objs_hndl).object[n]._3dPtH[3].y_point = rBottom - 50;
  911.         (**w_objs_hndl).object[n]._3dPtH[3].z_point = zBase - HSE_OBJ_SIZE - 5;
  912.  
  913.         (**w_objs_hndl).object[n]._3dPtH[4].x_point = rRight;
  914.         (**w_objs_hndl).object[n]._3dPtH[4].y_point = rBottom;
  915.         (**w_objs_hndl).object[n]._3dPtH[4].z_point = zBase - HSE_OBJ_SIZE - 5;
  916.  
  917.         (**w_objs_hndl).object[n]._3dPtH[5].x_point = offset.h + mouse_pt.h + 10;
  918.         (**w_objs_hndl).object[n]._3dPtH[5].y_point = rBottom;
  919.         (**w_objs_hndl).object[n]._3dPtH[5].z_point = zBase - HSE_OBJ_SIZE - 5;
  920.  
  921.         (**w_objs_hndl).object[n]._3dPtH[6].x_point = offset.h + mouse_pt.h + 10;
  922.         (**w_objs_hndl).object[n]._3dPtH[6].y_point = rBottom - 35;
  923.         (**w_objs_hndl).object[n]._3dPtH[6].z_point = zBase - HSE_OBJ_SIZE - 5;
  924.  
  925.         (**w_objs_hndl).object[n]._3dPtH[7].x_point = offset.h + mouse_pt.h - 10;
  926.         (**w_objs_hndl).object[n]._3dPtH[7].y_point = rBottom - 35;
  927.         (**w_objs_hndl).object[n]._3dPtH[7].z_point = zBase - HSE_OBJ_SIZE - 5;
  928.  
  929.         (**w_objs_hndl).object[n]._3dPtH[8].x_point = offset.h + mouse_pt.h - 10;
  930.         (**w_objs_hndl).object[n]._3dPtH[8].y_point = rBottom;
  931.         (**w_objs_hndl).object[n]._3dPtH[8].z_point = zBase - HSE_OBJ_SIZE - 5;
  932.  
  933.         (**w_objs_hndl).object[n]._3dPtH[9].x_point = rLeft;
  934.         (**w_objs_hndl).object[n]._3dPtH[9].y_point = rBottom;
  935.         (**w_objs_hndl).object[n]._3dPtH[9].z_point = zBase + HSE_OBJ_SIZE + 5;
  936.  
  937.         (**w_objs_hndl).object[n]._3dPtH[10].x_point = rLeft;
  938.         (**w_objs_hndl).object[n]._3dPtH[10].y_point = rBottom - 50;
  939.         (**w_objs_hndl).object[n]._3dPtH[10].z_point = zBase + HSE_OBJ_SIZE + 5;
  940.  
  941.         (**w_objs_hndl).object[n]._3dPtH[11].x_point = offset.h + mouse_pt.h;
  942.         (**w_objs_hndl).object[n]._3dPtH[11].y_point = rTop;
  943.         (**w_objs_hndl).object[n]._3dPtH[11].z_point = zBase + HSE_OBJ_SIZE + 5;
  944.  
  945.         (**w_objs_hndl).object[n]._3dPtH[12].x_point = rRight;
  946.         (**w_objs_hndl).object[n]._3dPtH[12].y_point = rBottom - 50;
  947.         (**w_objs_hndl).object[n]._3dPtH[12].z_point = zBase + HSE_OBJ_SIZE + 5;
  948.  
  949.         (**w_objs_hndl).object[n]._3dPtH[13].x_point = rRight;
  950.         (**w_objs_hndl).object[n]._3dPtH[13].y_point = rBottom;
  951.         (**w_objs_hndl).object[n]._3dPtH[13].z_point = zBase + HSE_OBJ_SIZE + 5;
  952.  
  953.         (**w_objs_hndl).object[n]._3dPtH[14].x_point = rLeft;
  954.         (**w_objs_hndl).object[n]._3dPtH[14].y_point = rBottom - 15;
  955.         (**w_objs_hndl).object[n]._3dPtH[14].z_point = zBase - 25;
  956.  
  957.         (**w_objs_hndl).object[n]._3dPtH[15].x_point = rLeft;
  958.         (**w_objs_hndl).object[n]._3dPtH[15].y_point = rBottom - 30;
  959.         (**w_objs_hndl).object[n]._3dPtH[15].z_point = zBase - 25;
  960.  
  961.         (**w_objs_hndl).object[n]._3dPtH[16].x_point = rLeft;
  962.         (**w_objs_hndl).object[n]._3dPtH[16].y_point = rBottom - 30;
  963.         (**w_objs_hndl).object[n]._3dPtH[16].z_point = zBase + 15;
  964.  
  965.         (**w_objs_hndl).object[n]._3dPtH[17].x_point = rLeft;
  966.         (**w_objs_hndl).object[n]._3dPtH[17].y_point = rBottom - 15;
  967.         (**w_objs_hndl).object[n]._3dPtH[17].z_point = zBase + 15;
  968.  
  969.         (**w_objs_hndl).object[n]._3dPtH[18].x_point = offset.h + mouse_pt.h - 10;
  970.         (**w_objs_hndl).object[n]._3dPtH[18].y_point = rBottom - 40;
  971.         (**w_objs_hndl).object[n]._3dPtH[18].z_point = zBase - HSE_OBJ_SIZE - 5;
  972.  
  973.         (**w_objs_hndl).object[n]._3dPtH[19].x_point = offset.h + mouse_pt.h - 10;
  974.         (**w_objs_hndl).object[n]._3dPtH[19].y_point = rBottom - 45;
  975.         (**w_objs_hndl).object[n]._3dPtH[19].z_point = zBase - HSE_OBJ_SIZE - 5;
  976.  
  977.         (**w_objs_hndl).object[n]._3dPtH[20].x_point = offset.h + mouse_pt.h - 15;
  978.         (**w_objs_hndl).object[n]._3dPtH[20].y_point = rBottom - 35;
  979.         (**w_objs_hndl).object[n]._3dPtH[20].z_point = zBase - HSE_OBJ_SIZE - 5;
  980.  
  981.         (**w_objs_hndl).object[n]._3dPtH[21].x_point = offset.h + mouse_pt.h - 20;
  982.         (**w_objs_hndl).object[n]._3dPtH[21].y_point = rBottom - 35;
  983.         (**w_objs_hndl).object[n]._3dPtH[21].z_point = zBase - HSE_OBJ_SIZE - 5;
  984.  
  985.         /** initialize rotation history matrix **/
  986.  
  987.         for(i = 0;i <=3;i++)
  988.         {
  989.             for(j = 0;j <= 3;j++)
  990.             {
  991.                 if(i == j)
  992.                 {
  993.                     (**w_objs_hndl).object[n].rotHist[i][j].rotElem = 1;
  994.                 }
  995.                 else
  996.                 {
  997.                     (**w_objs_hndl).object[n].rotHist[i][j].rotElem = 0;
  998.                 }    
  999.             }
  1000.         }
  1001. /*        //if(PreyMenu != NIL)*/
  1002. /*        {*/
  1003. /*            pred_hndl = (predDataHndl)NewHandle(sizeof(predData));*/
  1004. /*            (**pred_hndl).object[1] = (**w_objs_hndl).object[n];*/
  1005. /*            (**pred_hndl).type = type;*/
  1006. /*            (**pred_hndl).hasBackGround = (**w_objs_hndl).hasBackGround;*/
  1007. /*            (**pred_hndl).isArmed = (**w_objs_hndl).isArmed;*/
  1008. /*            (**pred_hndl).targets_left = (**w_objs_hndl).targets_left;*/
  1009. /*            (**pred_hndl).armament_type = (**w_objs_hndl).armament_type;*/
  1010. /*            (**pred_hndl).arms_selected = (**w_objs_hndl).arms_selected;*/
  1011. /*            (**pred_hndl).hasTargets = (**w_objs_hndl).hasTargets;*/
  1012. /*        }*/
  1013.     }
  1014.     else if(type == BACKGRND_OBJ || type == T_BACKGRND_OBJ)
  1015.     {
  1016.         /************* set vertices *************/
  1017.         
  1018.         (**w_objs_hndl).bg_object[0]._3dPt_BG[0].x_point = 500;    /*    first tetrahedron    */
  1019.         (**w_objs_hndl).bg_object[0]._3dPt_BG[0].y_point = 200;
  1020.         (**w_objs_hndl).bg_object[0]._3dPt_BG[0].z_point = - 500;
  1021.         (**w_objs_hndl).bg_object[0]._3dPt_BG[0].no_point = 1;
  1022.         
  1023.         (**w_objs_hndl).bg_object[0]._3dPt_BG[1].x_point = 540;
  1024.         (**w_objs_hndl).bg_object[0]._3dPt_BG[1].y_point = 200;
  1025.         (**w_objs_hndl).bg_object[0]._3dPt_BG[1].z_point = -480;
  1026.         (**w_objs_hndl).bg_object[0]._3dPt_BG[1].no_point = 1;
  1027.         
  1028.         (**w_objs_hndl).bg_object[0]._3dPt_BG[2].x_point = 560;
  1029.         (**w_objs_hndl).bg_object[0]._3dPt_BG[2].y_point = 200;
  1030.         (**w_objs_hndl).bg_object[0]._3dPt_BG[2].z_point = -520;
  1031.         (**w_objs_hndl).bg_object[0]._3dPt_BG[2].no_point = 1;
  1032.  
  1033.         (**w_objs_hndl).bg_object[0]._3dPt_BG[3].x_point = 530;
  1034.         (**w_objs_hndl).bg_object[0]._3dPt_BG[3].y_point = 170;
  1035.         (**w_objs_hndl).bg_object[0]._3dPt_BG[3].z_point = -500;
  1036.         (**w_objs_hndl).bg_object[0]._3dPt_BG[3].no_point = 1;
  1037.         
  1038.         (**w_objs_hndl).bg_object[0].z_reg = -500;
  1039.         (**w_objs_hndl).bg_object[0].max_pts = 4;
  1040.  
  1041.         (**w_objs_hndl).bg_object[1]._3dPt_BG[0].x_point = 580;    /*    second tetrahedron    */
  1042.         (**w_objs_hndl).bg_object[1]._3dPt_BG[0].y_point = 200;
  1043.         (**w_objs_hndl).bg_object[1]._3dPt_BG[0].z_point = -470;
  1044.         (**w_objs_hndl).bg_object[1]._3dPt_BG[0].no_point = 1;
  1045.     
  1046.         (**w_objs_hndl).bg_object[1]._3dPt_BG[1].x_point = 620;
  1047.         (**w_objs_hndl).bg_object[1]._3dPt_BG[1].y_point = 200;
  1048.         (**w_objs_hndl).bg_object[1]._3dPt_BG[1].z_point = -460;
  1049.         (**w_objs_hndl).bg_object[1]._3dPt_BG[1].no_point = 1;
  1050.     
  1051.         (**w_objs_hndl).bg_object[1]._3dPt_BG[2].x_point = 640;
  1052.         (**w_objs_hndl).bg_object[1]._3dPt_BG[2].y_point = 200;
  1053.         (**w_objs_hndl).bg_object[1]._3dPt_BG[2].z_point = -490;
  1054.         (**w_objs_hndl).bg_object[1]._3dPt_BG[2].no_point = 1;
  1055.     
  1056.         (**w_objs_hndl).bg_object[1]._3dPt_BG[3].x_point = 610;
  1057.         (**w_objs_hndl).bg_object[1]._3dPt_BG[3].y_point = 170;
  1058.         (**w_objs_hndl).bg_object[1]._3dPt_BG[3].z_point = -470;
  1059.         (**w_objs_hndl).bg_object[1]._3dPt_BG[3].no_point = 1;
  1060.     
  1061.         (**w_objs_hndl).bg_object[1].z_reg = -470;
  1062.         (**w_objs_hndl).bg_object[1].max_pts = 4;
  1063.     
  1064.         (**w_objs_hndl).bg_object[2]._3dPt_BG[0].x_point = 660;    /*    third tetrahedron    */
  1065.         (**w_objs_hndl).bg_object[2]._3dPt_BG[0].y_point = 200;
  1066.         (**w_objs_hndl).bg_object[2]._3dPt_BG[0].z_point = -440;
  1067.         (**w_objs_hndl).bg_object[2]._3dPt_BG[0].no_point = 1;
  1068.     
  1069.         (**w_objs_hndl).bg_object[2]._3dPt_BG[1].x_point = 700;
  1070.         (**w_objs_hndl).bg_object[2]._3dPt_BG[1].y_point = 200;
  1071.         (**w_objs_hndl).bg_object[2]._3dPt_BG[1].z_point = -420;
  1072.         (**w_objs_hndl).bg_object[2]._3dPt_BG[1].no_point = 1;
  1073.     
  1074.         (**w_objs_hndl).bg_object[2]._3dPt_BG[2].x_point = 720;
  1075.         (**w_objs_hndl).bg_object[2]._3dPt_BG[2].y_point = 200;
  1076.         (**w_objs_hndl).bg_object[2]._3dPt_BG[2].z_point = -460;
  1077.         (**w_objs_hndl).bg_object[2]._3dPt_BG[2].no_point = 1;
  1078.     
  1079.         (**w_objs_hndl).bg_object[2]._3dPt_BG[3].x_point = 690;
  1080.         (**w_objs_hndl).bg_object[2]._3dPt_BG[3].y_point = 170;
  1081.         (**w_objs_hndl).bg_object[2]._3dPt_BG[3].z_point = -440;
  1082.         (**w_objs_hndl).bg_object[2]._3dPt_BG[3].no_point = 1;
  1083.     
  1084.         (**w_objs_hndl).bg_object[2].z_reg = -440;
  1085.         (**w_objs_hndl).bg_object[2].max_pts = 4;
  1086.     
  1087.         (**w_objs_hndl).bg_object[3]._3dPt_BG[0].x_point = -200;        /*    first column    */
  1088.         (**w_objs_hndl).bg_object[3]._3dPt_BG[0].y_point = 200;
  1089.         (**w_objs_hndl).bg_object[3]._3dPt_BG[0].z_point = -100;
  1090.         (**w_objs_hndl).bg_object[3]._3dPt_BG[0].no_point = 1;
  1091.     
  1092.         (**w_objs_hndl).bg_object[3]._3dPt_BG[1].x_point = -160;
  1093.         (**w_objs_hndl).bg_object[3]._3dPt_BG[1].y_point = 200;
  1094.         (**w_objs_hndl).bg_object[3]._3dPt_BG[1].z_point = -100;
  1095.         (**w_objs_hndl).bg_object[3]._3dPt_BG[1].no_point = 1;
  1096.     
  1097.         (**w_objs_hndl).bg_object[3]._3dPt_BG[2].x_point = -160;
  1098.         (**w_objs_hndl).bg_object[3]._3dPt_BG[2].y_point =  200;
  1099.         (**w_objs_hndl).bg_object[3]._3dPt_BG[2].z_point = -140;
  1100.         (**w_objs_hndl).bg_object[3]._3dPt_BG[2].no_point = 1;
  1101.     
  1102.         (**w_objs_hndl).bg_object[3]._3dPt_BG[3].x_point = -200;
  1103.         (**w_objs_hndl).bg_object[3]._3dPt_BG[3].y_point = 200;
  1104.         (**w_objs_hndl).bg_object[3]._3dPt_BG[3].z_point = -140;
  1105.         (**w_objs_hndl).bg_object[3]._3dPt_BG[3].no_point = 1;
  1106.     
  1107.         (**w_objs_hndl).bg_object[3]._3dPt_BG[4].x_point = -200;
  1108.         (**w_objs_hndl).bg_object[3]._3dPt_BG[4].y_point = 100;
  1109.         (**w_objs_hndl).bg_object[3]._3dPt_BG[4].z_point = -100;
  1110.         (**w_objs_hndl).bg_object[3]._3dPt_BG[4].no_point = 1;
  1111.     
  1112.         (**w_objs_hndl).bg_object[3]._3dPt_BG[5].x_point = -160;
  1113.         (**w_objs_hndl).bg_object[3]._3dPt_BG[5].y_point = 100;
  1114.         (**w_objs_hndl).bg_object[3]._3dPt_BG[5].z_point = -100;
  1115.         (**w_objs_hndl).bg_object[3]._3dPt_BG[5].no_point = 1;
  1116.         
  1117.         (**w_objs_hndl).bg_object[3]._3dPt_BG[6].x_point = -160;
  1118.         (**w_objs_hndl).bg_object[3]._3dPt_BG[6].y_point = 100;
  1119.         (**w_objs_hndl).bg_object[3]._3dPt_BG[6].z_point = -140;
  1120.         (**w_objs_hndl).bg_object[3]._3dPt_BG[6].no_point = 1;
  1121.         
  1122.         (**w_objs_hndl).bg_object[3]._3dPt_BG[7].x_point = -200;
  1123.         (**w_objs_hndl).bg_object[3]._3dPt_BG[7].y_point = 100;
  1124.         (**w_objs_hndl).bg_object[3]._3dPt_BG[7].z_point = -140;
  1125.         (**w_objs_hndl).bg_object[3]._3dPt_BG[7].no_point = 1;
  1126.     
  1127.         (**w_objs_hndl).bg_object[3].z_reg = -100;
  1128.         (**w_objs_hndl).bg_object[3].max_pts = 8;
  1129.         
  1130.         (**w_objs_hndl).bg_object[4]._3dPt_BG[0].x_point = -100;        /*    second column    */
  1131.         (**w_objs_hndl).bg_object[4]._3dPt_BG[0].y_point = 200;
  1132.         (**w_objs_hndl).bg_object[4]._3dPt_BG[0].z_point = -80;
  1133.         (**w_objs_hndl).bg_object[4]._3dPt_BG[0].no_point = 1;
  1134.     
  1135.         (**w_objs_hndl).bg_object[4]._3dPt_BG[1].x_point = -60;
  1136.         (**w_objs_hndl).bg_object[4]._3dPt_BG[1].y_point = 200;
  1137.         (**w_objs_hndl).bg_object[4]._3dPt_BG[1].z_point = -80;
  1138.         (**w_objs_hndl).bg_object[4]._3dPt_BG[1].no_point = 1;
  1139.     
  1140.         (**w_objs_hndl).bg_object[4]._3dPt_BG[2].x_point = -60;
  1141.         (**w_objs_hndl).bg_object[4]._3dPt_BG[2].y_point = 200;
  1142.         (**w_objs_hndl).bg_object[4]._3dPt_BG[2].z_point = -120;
  1143.         (**w_objs_hndl).bg_object[4]._3dPt_BG[2].no_point = 1;
  1144.     
  1145.         (**w_objs_hndl).bg_object[4]._3dPt_BG[3].x_point = -100;
  1146.         (**w_objs_hndl).bg_object[4]._3dPt_BG[3].y_point = 200;
  1147.         (**w_objs_hndl).bg_object[4]._3dPt_BG[3].z_point = -120;
  1148.         (**w_objs_hndl).bg_object[4]._3dPt_BG[3].no_point = 1;
  1149.     
  1150.         (**w_objs_hndl).bg_object[4]._3dPt_BG[4].x_point = -100;
  1151.         (**w_objs_hndl).bg_object[4]._3dPt_BG[4].y_point = 100;
  1152.         (**w_objs_hndl).bg_object[4]._3dPt_BG[4].z_point = -80;
  1153.         (**w_objs_hndl).bg_object[4]._3dPt_BG[4].no_point = 1;
  1154.  
  1155.         (**w_objs_hndl).bg_object[4]._3dPt_BG[5].x_point = -60;
  1156.         (**w_objs_hndl).bg_object[4]._3dPt_BG[5].y_point = 130;
  1157.         (**w_objs_hndl).bg_object[4]._3dPt_BG[5].z_point = -80;
  1158.         (**w_objs_hndl).bg_object[4]._3dPt_BG[5].no_point = 1;
  1159.  
  1160.         (**w_objs_hndl).bg_object[4]._3dPt_BG[6].x_point = -60;
  1161.         (**w_objs_hndl).bg_object[4]._3dPt_BG[6].y_point = 130;
  1162.         (**w_objs_hndl).bg_object[4]._3dPt_BG[6].z_point = -120;
  1163.         (**w_objs_hndl).bg_object[4]._3dPt_BG[6].no_point = 1;
  1164.  
  1165.         (**w_objs_hndl).bg_object[4]._3dPt_BG[7].x_point = -100;
  1166.         (**w_objs_hndl).bg_object[4]._3dPt_BG[7].y_point = 100;
  1167.         (**w_objs_hndl).bg_object[4]._3dPt_BG[7].z_point = -120;
  1168.         (**w_objs_hndl).bg_object[4]._3dPt_BG[7].no_point = 1;
  1169.  
  1170.         (**w_objs_hndl).bg_object[4].z_reg = -80;
  1171.         (**w_objs_hndl).bg_object[4].max_pts = 8;
  1172.  
  1173.         (**w_objs_hndl).bg_object[5]._3dPt_BG[0].x_point = 0;        /*    third column    */
  1174.         (**w_objs_hndl).bg_object[5]._3dPt_BG[0].y_point = 200;
  1175.         (**w_objs_hndl).bg_object[5]._3dPt_BG[0].z_point = -60;
  1176.         (**w_objs_hndl).bg_object[5]._3dPt_BG[0].no_point = 1;
  1177.  
  1178.         (**w_objs_hndl).bg_object[5]._3dPt_BG[1].x_point = 40;
  1179.         (**w_objs_hndl).bg_object[5]._3dPt_BG[1].y_point = 200;
  1180.         (**w_objs_hndl).bg_object[5]._3dPt_BG[1].z_point = -60;
  1181.         (**w_objs_hndl).bg_object[5]._3dPt_BG[1].no_point = 1;
  1182.  
  1183.         (**w_objs_hndl).bg_object[5]._3dPt_BG[2].x_point = 40;
  1184.         (**w_objs_hndl).bg_object[5]._3dPt_BG[2].y_point = 200;
  1185.         (**w_objs_hndl).bg_object[5]._3dPt_BG[2].z_point = -100;
  1186.         (**w_objs_hndl).bg_object[5]._3dPt_BG[2].no_point = 1;
  1187.  
  1188.         (**w_objs_hndl).bg_object[5]._3dPt_BG[3].x_point = 0;
  1189.         (**w_objs_hndl).bg_object[5]._3dPt_BG[3].y_point = 200;
  1190.         (**w_objs_hndl).bg_object[5]._3dPt_BG[3].z_point = -100;
  1191.         (**w_objs_hndl).bg_object[5]._3dPt_BG[3].no_point = 1;
  1192.  
  1193.         (**w_objs_hndl).bg_object[5]._3dPt_BG[4].x_point = 0;
  1194.         (**w_objs_hndl).bg_object[5]._3dPt_BG[4].y_point = 130;
  1195.         (**w_objs_hndl).bg_object[5]._3dPt_BG[4].z_point = -60;
  1196.         (**w_objs_hndl).bg_object[5]._3dPt_BG[4].no_point = 1;
  1197.  
  1198.         (**w_objs_hndl).bg_object[5]._3dPt_BG[5].x_point = 40;
  1199.         (**w_objs_hndl).bg_object[5]._3dPt_BG[5].y_point = 130;
  1200.         (**w_objs_hndl).bg_object[5]._3dPt_BG[5].z_point = -60;
  1201.         (**w_objs_hndl).bg_object[5]._3dPt_BG[5].no_point = 1;
  1202.  
  1203.         (**w_objs_hndl).bg_object[5]._3dPt_BG[6].x_point = 40;
  1204.         (**w_objs_hndl).bg_object[5]._3dPt_BG[6].y_point = 100;
  1205.         (**w_objs_hndl).bg_object[5]._3dPt_BG[6].z_point = -100;
  1206.         (**w_objs_hndl).bg_object[5]._3dPt_BG[6].no_point = 1;
  1207.  
  1208.         (**w_objs_hndl).bg_object[5]._3dPt_BG[7].x_point = 0;
  1209.         (**w_objs_hndl).bg_object[5]._3dPt_BG[7].y_point = 100;
  1210.         (**w_objs_hndl).bg_object[5]._3dPt_BG[7].z_point = -100;
  1211.         (**w_objs_hndl).bg_object[5]._3dPt_BG[7].no_point = 1;
  1212.  
  1213.         (**w_objs_hndl).bg_object[5].z_reg = -60;
  1214.         (**w_objs_hndl).bg_object[5].max_pts = 8;
  1215.  
  1216.         (**w_objs_hndl).bg_object[6]._3dPt_BG[0].x_point = 100;            /*    first cube    */
  1217.         (**w_objs_hndl).bg_object[6]._3dPt_BG[0].y_point = 200;
  1218.         (**w_objs_hndl).bg_object[6]._3dPt_BG[0].z_point = 120;
  1219.         (**w_objs_hndl).bg_object[6]._3dPt_BG[0].no_point = 1;
  1220.         
  1221.         (**w_objs_hndl).bg_object[6]._3dPt_BG[1].x_point = 140;
  1222.         (**w_objs_hndl).bg_object[6]._3dPt_BG[1].y_point = 200;
  1223.         (**w_objs_hndl).bg_object[6]._3dPt_BG[1].z_point = 120;
  1224.         (**w_objs_hndl).bg_object[6]._3dPt_BG[1].no_point = 1;
  1225.         
  1226.         (**w_objs_hndl).bg_object[6]._3dPt_BG[2].x_point = 140;
  1227.         (**w_objs_hndl).bg_object[6]._3dPt_BG[2].y_point = 200;
  1228.         (**w_objs_hndl).bg_object[6]._3dPt_BG[2].z_point = 80;
  1229.         (**w_objs_hndl).bg_object[6]._3dPt_BG[2].no_point = 1;
  1230.  
  1231.         (**w_objs_hndl).bg_object[6]._3dPt_BG[3].x_point = 100;
  1232.         (**w_objs_hndl).bg_object[6]._3dPt_BG[3].y_point = 200;
  1233.         (**w_objs_hndl).bg_object[6]._3dPt_BG[3].z_point = 80;
  1234.         (**w_objs_hndl).bg_object[6]._3dPt_BG[3].no_point = 1;
  1235.  
  1236.         (**w_objs_hndl).bg_object[6]._3dPt_BG[4].x_point = 100;
  1237.         (**w_objs_hndl).bg_object[6]._3dPt_BG[4].y_point = 160;
  1238.         (**w_objs_hndl).bg_object[6]._3dPt_BG[4].z_point = 120;
  1239.         (**w_objs_hndl).bg_object[6]._3dPt_BG[4].no_point = 1;
  1240.  
  1241.         (**w_objs_hndl).bg_object[6]._3dPt_BG[5].x_point = 140;
  1242.         (**w_objs_hndl).bg_object[6]._3dPt_BG[5].y_point = 150;
  1243.         (**w_objs_hndl).bg_object[6]._3dPt_BG[5].z_point = 120;
  1244.         (**w_objs_hndl).bg_object[6]._3dPt_BG[5].no_point = 1;
  1245.  
  1246.         (**w_objs_hndl).bg_object[6]._3dPt_BG[6].x_point = 140;
  1247.         (**w_objs_hndl).bg_object[6]._3dPt_BG[6].y_point = 160;
  1248.         (**w_objs_hndl).bg_object[6]._3dPt_BG[6].z_point = 80;
  1249.         (**w_objs_hndl).bg_object[6]._3dPt_BG[6].no_point = 1;
  1250.  
  1251.         (**w_objs_hndl).bg_object[6]._3dPt_BG[7].x_point = 100;
  1252.         (**w_objs_hndl).bg_object[6]._3dPt_BG[7].y_point = 170;
  1253.         (**w_objs_hndl).bg_object[6]._3dPt_BG[7].z_point = 80;
  1254.         (**w_objs_hndl).bg_object[6]._3dPt_BG[7].no_point = 1;
  1255.  
  1256.         (**w_objs_hndl).bg_object[6].z_reg = 120;
  1257.         (**w_objs_hndl).bg_object[6].max_pts = 8;
  1258.  
  1259.         (**w_objs_hndl).bg_object[7]._3dPt_BG[0].x_point = 160;            /*    second cube    */
  1260.         (**w_objs_hndl).bg_object[7]._3dPt_BG[0].y_point = 200;
  1261.         (**w_objs_hndl).bg_object[7]._3dPt_BG[0].z_point = 180;
  1262.         (**w_objs_hndl).bg_object[7]._3dPt_BG[0].no_point = 1;
  1263.  
  1264.         (**w_objs_hndl).bg_object[7]._3dPt_BG[1].x_point = 200;
  1265.         (**w_objs_hndl).bg_object[7]._3dPt_BG[1].y_point = 200;
  1266.         (**w_objs_hndl).bg_object[7]._3dPt_BG[1].z_point = 180;
  1267.         (**w_objs_hndl).bg_object[7]._3dPt_BG[1].no_point = 1;
  1268.  
  1269.         (**w_objs_hndl).bg_object[7]._3dPt_BG[2].x_point = 200;
  1270.         (**w_objs_hndl).bg_object[7]._3dPt_BG[2].y_point = 200;
  1271.         (**w_objs_hndl).bg_object[7]._3dPt_BG[2].z_point = 140;
  1272.         (**w_objs_hndl).bg_object[7]._3dPt_BG[2].no_point = 1;
  1273.  
  1274.         (**w_objs_hndl).bg_object[7]._3dPt_BG[3].x_point = 160;
  1275.         (**w_objs_hndl).bg_object[7]._3dPt_BG[3].y_point = 200;
  1276.         (**w_objs_hndl).bg_object[7]._3dPt_BG[3].z_point = 140;
  1277.         (**w_objs_hndl).bg_object[7]._3dPt_BG[3].no_point = 1;
  1278.  
  1279.         (**w_objs_hndl).bg_object[7]._3dPt_BG[4].x_point = 160;
  1280.         (**w_objs_hndl).bg_object[7]._3dPt_BG[4].y_point = 160;
  1281.         (**w_objs_hndl).bg_object[7]._3dPt_BG[4].z_point = 180;
  1282.         (**w_objs_hndl).bg_object[7]._3dPt_BG[4].no_point = 1;
  1283.  
  1284.         (**w_objs_hndl).bg_object[7]._3dPt_BG[5].x_point = 200;
  1285.         (**w_objs_hndl).bg_object[7]._3dPt_BG[5].y_point = 160;
  1286.         (**w_objs_hndl).bg_object[7]._3dPt_BG[5].z_point = 180;
  1287.         (**w_objs_hndl).bg_object[7]._3dPt_BG[5].no_point = 1;
  1288.  
  1289.         (**w_objs_hndl).bg_object[7]._3dPt_BG[6].x_point = 200;
  1290.         (**w_objs_hndl).bg_object[7]._3dPt_BG[6].y_point = 160;
  1291.         (**w_objs_hndl).bg_object[7]._3dPt_BG[6].z_point = 140;
  1292.         (**w_objs_hndl).bg_object[7]._3dPt_BG[6].no_point = 1;
  1293.  
  1294.         (**w_objs_hndl).bg_object[7]._3dPt_BG[7].x_point = 160;
  1295.         (**w_objs_hndl).bg_object[7]._3dPt_BG[7].y_point = 160;
  1296.         (**w_objs_hndl).bg_object[7]._3dPt_BG[7].z_point = 140;
  1297.         (**w_objs_hndl).bg_object[7]._3dPt_BG[7].no_point = 1;
  1298.  
  1299.         (**w_objs_hndl).bg_object[7].z_reg = 180;
  1300.         (**w_objs_hndl).bg_object[7].max_pts = 8;
  1301.         
  1302.         (**w_objs_hndl).bg_object[8]._3dPt_BG[0].x_point = 200;            /*    third cube    */
  1303.         (**w_objs_hndl).bg_object[8]._3dPt_BG[0].y_point = 200;
  1304.         (**w_objs_hndl).bg_object[8]._3dPt_BG[0].z_point = -180;
  1305.         (**w_objs_hndl).bg_object[8]._3dPt_BG[0].no_point = 1;
  1306.  
  1307.         (**w_objs_hndl).bg_object[8]._3dPt_BG[1].x_point = 280;
  1308.         (**w_objs_hndl).bg_object[8]._3dPt_BG[1].y_point = 200;
  1309.         (**w_objs_hndl).bg_object[8]._3dPt_BG[1].z_point = -180;
  1310.         (**w_objs_hndl).bg_object[8]._3dPt_BG[1].no_point = 1;
  1311.  
  1312.         (**w_objs_hndl).bg_object[8]._3dPt_BG[2].x_point = 280;
  1313.         (**w_objs_hndl).bg_object[8]._3dPt_BG[2].y_point = 200;
  1314.         (**w_objs_hndl).bg_object[8]._3dPt_BG[2].z_point = -240;
  1315.         (**w_objs_hndl).bg_object[8]._3dPt_BG[2].no_point = 1;
  1316.  
  1317.         (**w_objs_hndl).bg_object[8]._3dPt_BG[3].x_point = 200;
  1318.         (**w_objs_hndl).bg_object[8]._3dPt_BG[3].y_point = 200;
  1319.         (**w_objs_hndl).bg_object[8]._3dPt_BG[3].z_point = -240;
  1320.         (**w_objs_hndl).bg_object[8]._3dPt_BG[3].no_point = 1;
  1321.  
  1322.         (**w_objs_hndl).bg_object[8]._3dPt_BG[4].x_point = 200;
  1323.         (**w_objs_hndl).bg_object[8]._3dPt_BG[4].y_point = 160;
  1324.         (**w_objs_hndl).bg_object[8]._3dPt_BG[4].z_point = -180;
  1325.         (**w_objs_hndl).bg_object[8]._3dPt_BG[4].no_point = 1;
  1326.  
  1327.         (**w_objs_hndl).bg_object[8]._3dPt_BG[5].x_point = 280;
  1328.         (**w_objs_hndl).bg_object[8]._3dPt_BG[5].y_point = 160;
  1329.         (**w_objs_hndl).bg_object[8]._3dPt_BG[5].z_point = -180;
  1330.         (**w_objs_hndl).bg_object[8]._3dPt_BG[5].no_point = 1;
  1331.  
  1332.         (**w_objs_hndl).bg_object[8]._3dPt_BG[6].x_point = 280;
  1333.         (**w_objs_hndl).bg_object[8]._3dPt_BG[6].y_point = 160;
  1334.         (**w_objs_hndl).bg_object[8]._3dPt_BG[6].z_point = -240;
  1335.         (**w_objs_hndl).bg_object[8]._3dPt_BG[6].no_point = 1;
  1336.  
  1337.         (**w_objs_hndl).bg_object[8]._3dPt_BG[7].x_point = 200;
  1338.         (**w_objs_hndl).bg_object[8]._3dPt_BG[7].y_point = 160;
  1339.         (**w_objs_hndl).bg_object[8]._3dPt_BG[7].z_point = -240;
  1340.         (**w_objs_hndl).bg_object[8]._3dPt_BG[7].no_point = 1;
  1341.  
  1342.         (**w_objs_hndl).bg_object[8].z_reg = -180;
  1343.         (**w_objs_hndl).bg_object[8].max_pts = 8;
  1344.  
  1345.         (**w_objs_hndl).bg_object[9]._3dPt_BG[0].x_point = 300;            /*    fourth cube    */
  1346.         (**w_objs_hndl).bg_object[9]._3dPt_BG[0].y_point = 200;
  1347.         (**w_objs_hndl).bg_object[9]._3dPt_BG[0].z_point = -480;
  1348.         (**w_objs_hndl).bg_object[9]._3dPt_BG[0].no_point = 1;
  1349.  
  1350.         (**w_objs_hndl).bg_object[9]._3dPt_BG[1].x_point = 380;
  1351.         (**w_objs_hndl).bg_object[9]._3dPt_BG[1].y_point = 200;
  1352.         (**w_objs_hndl).bg_object[9]._3dPt_BG[1].z_point = -480;
  1353.         (**w_objs_hndl).bg_object[9]._3dPt_BG[1].no_point = 1;
  1354.  
  1355.         (**w_objs_hndl).bg_object[9]._3dPt_BG[2].x_point = 380;
  1356.         (**w_objs_hndl).bg_object[9]._3dPt_BG[2].y_point = 200;
  1357.         (**w_objs_hndl).bg_object[9]._3dPt_BG[2].z_point = -540;
  1358.         (**w_objs_hndl).bg_object[9]._3dPt_BG[2].no_point = 1;
  1359.  
  1360.         (**w_objs_hndl).bg_object[9]._3dPt_BG[3].x_point = 300;
  1361.         (**w_objs_hndl).bg_object[9]._3dPt_BG[3].y_point = 200;
  1362.         (**w_objs_hndl).bg_object[9]._3dPt_BG[3].z_point = -540;
  1363.         (**w_objs_hndl).bg_object[9]._3dPt_BG[3].no_point = 1;
  1364.  
  1365.         (**w_objs_hndl).bg_object[9]._3dPt_BG[4].x_point = 300;
  1366.         (**w_objs_hndl).bg_object[9]._3dPt_BG[4].y_point = 160;
  1367.         (**w_objs_hndl).bg_object[9]._3dPt_BG[4].z_point = -480;
  1368.         (**w_objs_hndl).bg_object[9]._3dPt_BG[4].no_point = 1;
  1369.  
  1370.         (**w_objs_hndl).bg_object[9]._3dPt_BG[5].x_point = 380;
  1371.         (**w_objs_hndl).bg_object[9]._3dPt_BG[5].y_point = 160;
  1372.         (**w_objs_hndl).bg_object[9]._3dPt_BG[5].z_point = -480;
  1373.         (**w_objs_hndl).bg_object[9]._3dPt_BG[5].no_point = 1;
  1374.  
  1375.         (**w_objs_hndl).bg_object[9]._3dPt_BG[6].x_point = 380;
  1376.         (**w_objs_hndl).bg_object[9]._3dPt_BG[6].y_point = 160;
  1377.         (**w_objs_hndl).bg_object[9]._3dPt_BG[6].z_point = -540;
  1378.         (**w_objs_hndl).bg_object[9]._3dPt_BG[6].no_point = 1;
  1379.  
  1380.         (**w_objs_hndl).bg_object[9]._3dPt_BG[7].x_point = 300;
  1381.         (**w_objs_hndl).bg_object[9]._3dPt_BG[7].y_point = 160;
  1382.         (**w_objs_hndl).bg_object[9]._3dPt_BG[7].z_point = -540;
  1383.         (**w_objs_hndl).bg_object[9]._3dPt_BG[7].no_point = 1;
  1384.  
  1385.         (**w_objs_hndl).bg_object[9].z_reg = -480;
  1386.         (**w_objs_hndl).bg_object[9].max_pts = 8;
  1387.  
  1388.         (**w_objs_hndl).bg_object[10]._3dPt_BG[0].x_point = 490;        /*    first triangle    */
  1389.         (**w_objs_hndl).bg_object[10]._3dPt_BG[0].y_point = 200;
  1390.         (**w_objs_hndl).bg_object[10]._3dPt_BG[0].z_point = 200;
  1391.         (**w_objs_hndl).bg_object[10]._3dPt_BG[0].no_point = 1;
  1392.  
  1393.         (**w_objs_hndl).bg_object[10]._3dPt_BG[1].x_point = 690;
  1394.         (**w_objs_hndl).bg_object[10]._3dPt_BG[1].y_point = 200;
  1395.         (**w_objs_hndl).bg_object[10]._3dPt_BG[1].z_point = 200;
  1396.         (**w_objs_hndl).bg_object[10]._3dPt_BG[1].no_point = 1;
  1397.         
  1398.         (**w_objs_hndl).bg_object[10]._3dPt_BG[2].x_point = 590;
  1399.         (**w_objs_hndl).bg_object[10]._3dPt_BG[2].y_point = 200;
  1400.         (**w_objs_hndl).bg_object[10]._3dPt_BG[2].z_point = 30;
  1401.         (**w_objs_hndl).bg_object[10]._3dPt_BG[2].no_point = 1;
  1402.         
  1403.         (**w_objs_hndl).bg_object[10].z_reg = 200;
  1404.         (**w_objs_hndl).bg_object[10].max_pts = 3;
  1405.  
  1406.         (**w_objs_hndl).bg_object[11]._3dPt_BG[0].x_point = 10;            /*    second triangle    */
  1407.         (**w_objs_hndl).bg_object[11]._3dPt_BG[0].y_point = 200;
  1408.         (**w_objs_hndl).bg_object[11]._3dPt_BG[0].z_point = 200;
  1409.         (**w_objs_hndl).bg_object[11]._3dPt_BG[0].no_point = 1;
  1410.         
  1411.         (**w_objs_hndl).bg_object[11]._3dPt_BG[1].x_point = 210;
  1412.         (**w_objs_hndl).bg_object[11]._3dPt_BG[1].y_point = 200;
  1413.         (**w_objs_hndl).bg_object[11]._3dPt_BG[1].z_point = 200;
  1414.         (**w_objs_hndl).bg_object[11]._3dPt_BG[1].no_point = 1;
  1415.  
  1416.         (**w_objs_hndl).bg_object[11]._3dPt_BG[2].x_point = 110;
  1417.         (**w_objs_hndl).bg_object[11]._3dPt_BG[2].y_point = 200;
  1418.         (**w_objs_hndl).bg_object[11]._3dPt_BG[2].z_point = 30;
  1419.         (**w_objs_hndl).bg_object[11]._3dPt_BG[2].no_point = 1;
  1420.  
  1421.         (**w_objs_hndl).bg_object[11].z_reg = 200;
  1422.         (**w_objs_hndl).bg_object[11].max_pts = 3;
  1423.  
  1424.         (**w_objs_hndl).bg_object[12]._3dPt_BG[0].x_point = 250;            /*    third triangle    */
  1425.         (**w_objs_hndl).bg_object[12]._3dPt_BG[0].y_point = 200;
  1426.         (**w_objs_hndl).bg_object[12]._3dPt_BG[0].z_point = 200;
  1427.         (**w_objs_hndl).bg_object[12]._3dPt_BG[0].no_point = 1;
  1428.  
  1429.         (**w_objs_hndl).bg_object[12]._3dPt_BG[1].x_point = 450;
  1430.         (**w_objs_hndl).bg_object[12]._3dPt_BG[1].y_point = 200;
  1431.         (**w_objs_hndl).bg_object[12]._3dPt_BG[1].z_point = 200;
  1432.         (**w_objs_hndl).bg_object[12]._3dPt_BG[1].no_point = 1;
  1433.  
  1434.         (**w_objs_hndl).bg_object[12]._3dPt_BG[2].x_point = 350;
  1435.         (**w_objs_hndl).bg_object[12]._3dPt_BG[2].y_point = 200;
  1436.         (**w_objs_hndl).bg_object[12]._3dPt_BG[2].z_point = 30;
  1437.         (**w_objs_hndl).bg_object[12]._3dPt_BG[2].no_point = 1;
  1438.  
  1439.         (**w_objs_hndl).bg_object[12].z_reg = 200;
  1440.         (**w_objs_hndl).bg_object[12].max_pts = 3;
  1441.  
  1442.         (**w_objs_hndl).bg_object[13]._3dPt_BG[0].x_point = 490;        /*    fourth triangle    */
  1443.         (**w_objs_hndl).bg_object[13]._3dPt_BG[0].y_point = 200;
  1444.         (**w_objs_hndl).bg_object[13]._3dPt_BG[0].z_point = -30;
  1445.         (**w_objs_hndl).bg_object[13]._3dPt_BG[0].no_point = 1;
  1446.  
  1447.         (**w_objs_hndl).bg_object[13]._3dPt_BG[1].x_point = 690;
  1448.         (**w_objs_hndl).bg_object[13]._3dPt_BG[1].y_point = 200;
  1449.         (**w_objs_hndl).bg_object[13]._3dPt_BG[1].z_point = -30;
  1450.         (**w_objs_hndl).bg_object[13]._3dPt_BG[1].no_point = 1;
  1451.  
  1452.         (**w_objs_hndl).bg_object[13]._3dPt_BG[2].x_point = 590;
  1453.         (**w_objs_hndl).bg_object[13]._3dPt_BG[2].y_point = 200;
  1454.         (**w_objs_hndl).bg_object[13]._3dPt_BG[2].z_point = -200;
  1455.         (**w_objs_hndl).bg_object[13]._3dPt_BG[2].no_point = 1;
  1456.  
  1457.         (**w_objs_hndl).bg_object[13].z_reg = -30;
  1458.         (**w_objs_hndl).bg_object[13].max_pts = 3;
  1459.  
  1460.         (**w_objs_hndl).bg_object[14]._3dPt_BG[0].x_point = 10;            /*    fifth triangle    */
  1461.         (**w_objs_hndl).bg_object[14]._3dPt_BG[0].y_point = 200;
  1462.         (**w_objs_hndl).bg_object[14]._3dPt_BG[0].z_point = -30;
  1463.         (**w_objs_hndl).bg_object[14]._3dPt_BG[0].no_point = 1;
  1464.  
  1465.         (**w_objs_hndl).bg_object[14]._3dPt_BG[1].x_point = 210;
  1466.         (**w_objs_hndl).bg_object[14]._3dPt_BG[1].y_point = 200;
  1467.         (**w_objs_hndl).bg_object[14]._3dPt_BG[1].z_point = -30;
  1468.         (**w_objs_hndl).bg_object[14]._3dPt_BG[1].no_point = 1;
  1469.  
  1470.         (**w_objs_hndl).bg_object[14]._3dPt_BG[2].x_point = 110;
  1471.         (**w_objs_hndl).bg_object[14]._3dPt_BG[2].y_point = 200;
  1472.         (**w_objs_hndl).bg_object[14]._3dPt_BG[2].z_point = -200;
  1473.         (**w_objs_hndl).bg_object[14]._3dPt_BG[2].no_point = 1;
  1474.  
  1475.         (**w_objs_hndl).bg_object[14].z_reg = -30;
  1476.         (**w_objs_hndl).bg_object[14].max_pts = 3;
  1477.  
  1478.         (**w_objs_hndl).bg_object[15]._3dPt_BG[0].x_point = 250;            /*    sixth triangle    */
  1479.         (**w_objs_hndl).bg_object[15]._3dPt_BG[0].y_point = 200;
  1480.         (**w_objs_hndl).bg_object[15]._3dPt_BG[0].z_point = -30;
  1481.         (**w_objs_hndl).bg_object[15]._3dPt_BG[0].no_point = 1;
  1482.  
  1483.         (**w_objs_hndl).bg_object[15]._3dPt_BG[1].x_point = 450;
  1484.         (**w_objs_hndl).bg_object[15]._3dPt_BG[1].y_point = 200;
  1485.         (**w_objs_hndl).bg_object[15]._3dPt_BG[1].z_point = -30;
  1486.         (**w_objs_hndl).bg_object[15]._3dPt_BG[1].no_point = 1;
  1487.  
  1488.         (**w_objs_hndl).bg_object[15]._3dPt_BG[2].x_point = 350;
  1489.         (**w_objs_hndl).bg_object[15]._3dPt_BG[2].y_point = 200;
  1490.         (**w_objs_hndl).bg_object[15]._3dPt_BG[2].z_point = -200;
  1491.         (**w_objs_hndl).bg_object[15]._3dPt_BG[2].no_point = 1;
  1492.  
  1493.         (**w_objs_hndl).bg_object[15].z_reg = -30;
  1494.         (**w_objs_hndl).bg_object[15].max_pts = 3;
  1495.         
  1496.         if(type == T_BACKGRND_OBJ)
  1497.         {            
  1498.             GetPoint(&xx,&yy,&zz);
  1499.             
  1500.             (**w_objs_hndl).bg_object[16]._3dPt_BG[0].x_point = xx;            /*    first calculator    */
  1501.             (**w_objs_hndl).bg_object[16]._3dPt_BG[0].y_point = yy;
  1502.             (**w_objs_hndl).bg_object[16]._3dPt_BG[0].z_point = zz;
  1503.             (**w_objs_hndl).bg_object[16]._3dPt_BG[0].no_point = 1;
  1504.             
  1505.             (**w_objs_hndl).bg_object[16]._3dPtH_BG[0].x_point = xx;
  1506.             (**w_objs_hndl).bg_object[16]._3dPtH_BG[0].y_point = yy;
  1507.             (**w_objs_hndl).bg_object[16]._3dPtH_BG[0].z_point = zz;
  1508.             (**w_objs_hndl).bg_object[16]._3dPtH_BG[0].no_point = 1;
  1509.             
  1510.             (**w_objs_hndl).bg_object[16].z_reg = zz;
  1511.             (**w_objs_hndl).bg_object[16].max_pts = 1;
  1512.             (**w_objs_hndl).bg_object[16].alive = TRUE;
  1513.  
  1514.             GetPoint(&xx,&yy,&zz);
  1515.  
  1516.             (**w_objs_hndl).bg_object[17]._3dPt_BG[0].x_point = xx;            /*    second calculator    */
  1517.             (**w_objs_hndl).bg_object[17]._3dPt_BG[0].y_point = yy;
  1518.             (**w_objs_hndl).bg_object[17]._3dPt_BG[0].z_point = zz;
  1519.             (**w_objs_hndl).bg_object[17]._3dPt_BG[0].no_point = 1;
  1520.  
  1521.             (**w_objs_hndl).bg_object[17]._3dPtH_BG[0].x_point = xx;
  1522.             (**w_objs_hndl).bg_object[17]._3dPtH_BG[0].y_point = yy;
  1523.             (**w_objs_hndl).bg_object[17]._3dPtH_BG[0].z_point = zz;
  1524.             (**w_objs_hndl).bg_object[17]._3dPtH_BG[0].no_point = 1;
  1525.             
  1526.             (**w_objs_hndl).bg_object[17].z_reg = zz;
  1527.             (**w_objs_hndl).bg_object[17].max_pts = 1;
  1528.             (**w_objs_hndl).bg_object[17].alive = TRUE;
  1529.  
  1530.             GetPoint(&xx,&yy,&zz);
  1531.             
  1532.             (**w_objs_hndl).bg_object[18]._3dPt_BG[0].x_point = xx;            /*    third calculator    */
  1533.             (**w_objs_hndl).bg_object[18]._3dPt_BG[0].y_point = yy;
  1534.             (**w_objs_hndl).bg_object[18]._3dPt_BG[0].z_point = zz;
  1535.             (**w_objs_hndl).bg_object[18]._3dPt_BG[0].no_point = 1;
  1536.  
  1537.             (**w_objs_hndl).bg_object[18]._3dPtH_BG[0].x_point = xx;
  1538.             (**w_objs_hndl).bg_object[18]._3dPtH_BG[0].y_point = yy;
  1539.             (**w_objs_hndl).bg_object[18]._3dPtH_BG[0].z_point = zz;
  1540.             (**w_objs_hndl).bg_object[18]._3dPtH_BG[0].no_point = 1;
  1541.             
  1542.             (**w_objs_hndl).bg_object[18].z_reg = zz;
  1543.             (**w_objs_hndl).bg_object[18].max_pts = 1;
  1544.             (**w_objs_hndl).bg_object[18].alive = TRUE;
  1545.  
  1546.             GetPoint(&xx,&yy,&zz);
  1547.  
  1548.             (**w_objs_hndl).bg_object[19]._3dPt_BG[0].x_point = xx;            /*    fourth calculator    */
  1549.             (**w_objs_hndl).bg_object[19]._3dPt_BG[0].y_point = yy;
  1550.             (**w_objs_hndl).bg_object[19]._3dPt_BG[0].z_point = zz;
  1551.             (**w_objs_hndl).bg_object[19]._3dPt_BG[0].no_point = 1;
  1552.  
  1553.             (**w_objs_hndl).bg_object[19]._3dPtH_BG[0].x_point = xx;
  1554.             (**w_objs_hndl).bg_object[19]._3dPtH_BG[0].y_point = yy;
  1555.             (**w_objs_hndl).bg_object[19]._3dPtH_BG[0].z_point = zz;
  1556.             (**w_objs_hndl).bg_object[19]._3dPtH_BG[0].no_point = 1;
  1557.             
  1558.             (**w_objs_hndl).bg_object[19].z_reg = zz;
  1559.             (**w_objs_hndl).bg_object[19].max_pts = 1;
  1560.             (**w_objs_hndl).bg_object[19].alive = TRUE;
  1561.  
  1562.             GetPoint(&xx,&yy,&zz);
  1563.  
  1564.             (**w_objs_hndl).bg_object[20]._3dPt_BG[0].x_point = xx;            /*    fifth calculator    */
  1565.             (**w_objs_hndl).bg_object[20]._3dPt_BG[0].y_point = yy;
  1566.             (**w_objs_hndl).bg_object[20]._3dPt_BG[0].z_point = zz;
  1567.             (**w_objs_hndl).bg_object[20]._3dPt_BG[0].no_point = 1;
  1568.  
  1569.             (**w_objs_hndl).bg_object[20]._3dPtH_BG[0].x_point = xx;
  1570.             (**w_objs_hndl).bg_object[20]._3dPtH_BG[0].y_point = yy;
  1571.             (**w_objs_hndl).bg_object[20]._3dPtH_BG[0].z_point = zz;
  1572.             (**w_objs_hndl).bg_object[20]._3dPtH_BG[0].no_point = 1;
  1573.             
  1574.             (**w_objs_hndl).bg_object[20].z_reg = zz;
  1575.             (**w_objs_hndl).bg_object[20].max_pts = 1;
  1576.             (**w_objs_hndl).bg_object[20].alive = TRUE;
  1577.  
  1578.             GetPoint(&xx,&yy,&zz);
  1579.  
  1580.             (**w_objs_hndl).bg_object[21]._3dPt_BG[0].x_point = xx;            /*    sixth calculator    */
  1581.             (**w_objs_hndl).bg_object[21]._3dPt_BG[0].y_point = yy;
  1582.             (**w_objs_hndl).bg_object[21]._3dPt_BG[0].z_point = zz;
  1583.             (**w_objs_hndl).bg_object[21]._3dPt_BG[0].no_point = 1;
  1584.  
  1585.             (**w_objs_hndl).bg_object[21]._3dPtH_BG[0].x_point = xx;
  1586.             (**w_objs_hndl).bg_object[21]._3dPtH_BG[0].y_point = yy;
  1587.             (**w_objs_hndl).bg_object[21]._3dPtH_BG[0].z_point = zz;
  1588.             (**w_objs_hndl).bg_object[21]._3dPtH_BG[0].no_point = 1;
  1589.             
  1590.             (**w_objs_hndl).bg_object[21].z_reg = zz;
  1591.             (**w_objs_hndl).bg_object[21].max_pts = 1;
  1592.             (**w_objs_hndl).bg_object[21].alive = TRUE;
  1593.  
  1594.         }
  1595.         /****** set vertices for posterity ******/
  1596.         
  1597.         (**w_objs_hndl).bg_object[0]._3dPtH_BG[0].x_point = 500;    /*    first tetrahedron    */
  1598.         (**w_objs_hndl).bg_object[0]._3dPtH_BG[0].y_point = 200;
  1599.         (**w_objs_hndl).bg_object[0]._3dPtH_BG[0].z_point = - 500;
  1600.         
  1601.         (**w_objs_hndl).bg_object[0]._3dPtH_BG[1].x_point = 540;
  1602.         (**w_objs_hndl).bg_object[0]._3dPtH_BG[1].y_point = 200;
  1603.         (**w_objs_hndl).bg_object[0]._3dPtH_BG[1].z_point = -480;
  1604.         
  1605.         (**w_objs_hndl).bg_object[0]._3dPtH_BG[2].x_point = 560;
  1606.         (**w_objs_hndl).bg_object[0]._3dPtH_BG[2].y_point = 200;
  1607.         (**w_objs_hndl).bg_object[0]._3dPtH_BG[2].z_point = -520;
  1608.  
  1609.         (**w_objs_hndl).bg_object[0]._3dPtH_BG[3].x_point = 530;
  1610.         (**w_objs_hndl).bg_object[0]._3dPtH_BG[3].y_point = 170;
  1611.         (**w_objs_hndl).bg_object[0]._3dPtH_BG[3].z_point = -500;
  1612.  
  1613.  
  1614.         (**w_objs_hndl).bg_object[1]._3dPtH_BG[0].x_point = 580;    /*    second tetrahedron    */
  1615.         (**w_objs_hndl).bg_object[1]._3dPtH_BG[0].y_point = 200;
  1616.         (**w_objs_hndl).bg_object[1]._3dPtH_BG[0].z_point = -470;
  1617.  
  1618.         (**w_objs_hndl).bg_object[1]._3dPtH_BG[1].x_point = 620;
  1619.         (**w_objs_hndl).bg_object[1]._3dPtH_BG[1].y_point = 200;
  1620.         (**w_objs_hndl).bg_object[1]._3dPtH_BG[1].z_point = -460;
  1621.  
  1622.         (**w_objs_hndl).bg_object[1]._3dPtH_BG[2].x_point = 640;
  1623.         (**w_objs_hndl).bg_object[1]._3dPtH_BG[2].y_point = 200;
  1624.         (**w_objs_hndl).bg_object[1]._3dPtH_BG[2].z_point = -490;
  1625.  
  1626.         (**w_objs_hndl).bg_object[1]._3dPtH_BG[3].x_point = 610;
  1627.         (**w_objs_hndl).bg_object[1]._3dPtH_BG[3].y_point = 170;
  1628.         (**w_objs_hndl).bg_object[1]._3dPtH_BG[3].z_point = -470;
  1629.  
  1630.  
  1631.         (**w_objs_hndl).bg_object[2]._3dPtH_BG[0].x_point = 660;    /*    third tetrahedron    */
  1632.         (**w_objs_hndl).bg_object[2]._3dPtH_BG[0].y_point = 200;
  1633.         (**w_objs_hndl).bg_object[2]._3dPtH_BG[0].z_point = -440;
  1634.  
  1635.         (**w_objs_hndl).bg_object[2]._3dPtH_BG[1].x_point = 700;
  1636.         (**w_objs_hndl).bg_object[2]._3dPtH_BG[1].y_point = 200;
  1637.         (**w_objs_hndl).bg_object[2]._3dPtH_BG[1].z_point = -420;
  1638.  
  1639.         (**w_objs_hndl).bg_object[2]._3dPtH_BG[2].x_point = 720;
  1640.         (**w_objs_hndl).bg_object[2]._3dPtH_BG[2].y_point = 200;
  1641.         (**w_objs_hndl).bg_object[2]._3dPtH_BG[2].z_point = -460;
  1642.  
  1643.         (**w_objs_hndl).bg_object[2]._3dPtH_BG[3].x_point = 690;
  1644.         (**w_objs_hndl).bg_object[2]._3dPtH_BG[3].y_point = 170;
  1645.         (**w_objs_hndl).bg_object[2]._3dPtH_BG[3].z_point = -440;
  1646.         
  1647.  
  1648.         (**w_objs_hndl).bg_object[3]._3dPtH_BG[0].x_point = -200;        /*    first column    */
  1649.         (**w_objs_hndl).bg_object[3]._3dPtH_BG[0].y_point = 200;
  1650.         (**w_objs_hndl).bg_object[3]._3dPtH_BG[0].z_point = -100;
  1651.  
  1652.         (**w_objs_hndl).bg_object[3]._3dPtH_BG[1].x_point = -160;
  1653.         (**w_objs_hndl).bg_object[3]._3dPtH_BG[1].y_point = 200;
  1654.         (**w_objs_hndl).bg_object[3]._3dPtH_BG[1].z_point = -100;
  1655.  
  1656.         (**w_objs_hndl).bg_object[3]._3dPtH_BG[2].x_point = -160;
  1657.         (**w_objs_hndl).bg_object[3]._3dPtH_BG[2].y_point =  200;
  1658.         (**w_objs_hndl).bg_object[3]._3dPtH_BG[2].z_point = -140;
  1659.  
  1660.         (**w_objs_hndl).bg_object[3]._3dPtH_BG[3].x_point = -200;
  1661.         (**w_objs_hndl).bg_object[3]._3dPtH_BG[3].y_point = 200;
  1662.         (**w_objs_hndl).bg_object[3]._3dPtH_BG[3].z_point = -140;
  1663.  
  1664.         (**w_objs_hndl).bg_object[3]._3dPtH_BG[4].x_point = -200;
  1665.         (**w_objs_hndl).bg_object[3]._3dPtH_BG[4].y_point = 100;
  1666.         (**w_objs_hndl).bg_object[3]._3dPtH_BG[4].z_point = -100;
  1667.  
  1668.         (**w_objs_hndl).bg_object[3]._3dPtH_BG[5].x_point = -160;
  1669.         (**w_objs_hndl).bg_object[3]._3dPtH_BG[5].y_point = 100;
  1670.         (**w_objs_hndl).bg_object[3]._3dPtH_BG[5].z_point = -100;
  1671.         
  1672.         (**w_objs_hndl).bg_object[3]._3dPtH_BG[6].x_point = -160;
  1673.         (**w_objs_hndl).bg_object[3]._3dPtH_BG[6].y_point = 100;
  1674.         (**w_objs_hndl).bg_object[3]._3dPtH_BG[6].z_point = -140;
  1675.         
  1676.         (**w_objs_hndl).bg_object[3]._3dPtH_BG[7].x_point = -200;
  1677.         (**w_objs_hndl).bg_object[3]._3dPtH_BG[7].y_point = 100;
  1678.         (**w_objs_hndl).bg_object[3]._3dPtH_BG[7].z_point = -140;
  1679.     
  1680.         
  1681.         (**w_objs_hndl).bg_object[4]._3dPtH_BG[0].x_point = -100;        /*    second column    */
  1682.         (**w_objs_hndl).bg_object[4]._3dPtH_BG[0].y_point = 200;
  1683.         (**w_objs_hndl).bg_object[4]._3dPtH_BG[0].z_point = -80;
  1684.  
  1685.         (**w_objs_hndl).bg_object[4]._3dPtH_BG[1].x_point = -60;
  1686.         (**w_objs_hndl).bg_object[4]._3dPtH_BG[1].y_point = 200;
  1687.         (**w_objs_hndl).bg_object[4]._3dPtH_BG[1].z_point = -80;
  1688.  
  1689.         (**w_objs_hndl).bg_object[4]._3dPtH_BG[2].x_point = -60;
  1690.         (**w_objs_hndl).bg_object[4]._3dPtH_BG[2].y_point = 200;
  1691.         (**w_objs_hndl).bg_object[4]._3dPtH_BG[2].z_point = -120;
  1692.  
  1693.         (**w_objs_hndl).bg_object[4]._3dPtH_BG[3].x_point = -100;
  1694.         (**w_objs_hndl).bg_object[4]._3dPtH_BG[3].y_point = 200;
  1695.         (**w_objs_hndl).bg_object[4]._3dPtH_BG[3].z_point = -120;
  1696.  
  1697.         (**w_objs_hndl).bg_object[4]._3dPtH_BG[4].x_point = -100;
  1698.         (**w_objs_hndl).bg_object[4]._3dPtH_BG[4].y_point = 100;
  1699.         (**w_objs_hndl).bg_object[4]._3dPtH_BG[4].z_point = -80;
  1700.  
  1701.         (**w_objs_hndl).bg_object[4]._3dPtH_BG[5].x_point = -60;
  1702.         (**w_objs_hndl).bg_object[4]._3dPtH_BG[5].y_point = 130;
  1703.         (**w_objs_hndl).bg_object[4]._3dPtH_BG[5].z_point = -80;
  1704.  
  1705.         (**w_objs_hndl).bg_object[4]._3dPtH_BG[6].x_point = -60;
  1706.         (**w_objs_hndl).bg_object[4]._3dPtH_BG[6].y_point = 130;
  1707.         (**w_objs_hndl).bg_object[4]._3dPtH_BG[6].z_point = -120;
  1708.  
  1709.         (**w_objs_hndl).bg_object[4]._3dPtH_BG[7].x_point = -100;
  1710.         (**w_objs_hndl).bg_object[4]._3dPtH_BG[7].y_point = 100;
  1711.         (**w_objs_hndl).bg_object[4]._3dPtH_BG[7].z_point = -120;
  1712.  
  1713.  
  1714.         (**w_objs_hndl).bg_object[5]._3dPtH_BG[0].x_point = 0;        /*    third column    */
  1715.         (**w_objs_hndl).bg_object[5]._3dPtH_BG[0].y_point = 200;
  1716.         (**w_objs_hndl).bg_object[5]._3dPtH_BG[0].z_point = -60;
  1717.  
  1718.         (**w_objs_hndl).bg_object[5]._3dPtH_BG[1].x_point = 40;
  1719.         (**w_objs_hndl).bg_object[5]._3dPtH_BG[1].y_point = 200;
  1720.         (**w_objs_hndl).bg_object[5]._3dPtH_BG[1].z_point = -60;
  1721.  
  1722.         (**w_objs_hndl).bg_object[5]._3dPtH_BG[2].x_point = 40;
  1723.         (**w_objs_hndl).bg_object[5]._3dPtH_BG[2].y_point = 200;
  1724.         (**w_objs_hndl).bg_object[5]._3dPtH_BG[2].z_point = -100;
  1725.  
  1726.         (**w_objs_hndl).bg_object[5]._3dPtH_BG[3].x_point = 0;
  1727.         (**w_objs_hndl).bg_object[5]._3dPtH_BG[3].y_point = 200;
  1728.         (**w_objs_hndl).bg_object[5]._3dPtH_BG[3].z_point = -100;
  1729.  
  1730.         (**w_objs_hndl).bg_object[5]._3dPtH_BG[4].x_point = 0;
  1731.         (**w_objs_hndl).bg_object[5]._3dPtH_BG[4].y_point = 130;
  1732.         (**w_objs_hndl).bg_object[5]._3dPtH_BG[4].z_point = -60;
  1733.  
  1734.         (**w_objs_hndl).bg_object[5]._3dPtH_BG[5].x_point = 40;
  1735.         (**w_objs_hndl).bg_object[5]._3dPtH_BG[5].y_point = 130;
  1736.         (**w_objs_hndl).bg_object[5]._3dPtH_BG[5].z_point = -60;
  1737.  
  1738.         (**w_objs_hndl).bg_object[5]._3dPtH_BG[6].x_point = 40;
  1739.         (**w_objs_hndl).bg_object[5]._3dPtH_BG[6].y_point = 100;
  1740.         (**w_objs_hndl).bg_object[5]._3dPtH_BG[6].z_point = -100;
  1741.  
  1742.         (**w_objs_hndl).bg_object[5]._3dPtH_BG[7].x_point = 0;
  1743.         (**w_objs_hndl).bg_object[5]._3dPtH_BG[7].y_point = 100;
  1744.         (**w_objs_hndl).bg_object[5]._3dPtH_BG[7].z_point = -100;
  1745.  
  1746.  
  1747.         (**w_objs_hndl).bg_object[6]._3dPtH_BG[0].x_point = 100;            /*    first cube    */
  1748.         (**w_objs_hndl).bg_object[6]._3dPtH_BG[0].y_point = 200;
  1749.         (**w_objs_hndl).bg_object[6]._3dPtH_BG[0].z_point = 120;
  1750.         
  1751.         (**w_objs_hndl).bg_object[6]._3dPtH_BG[1].x_point = 140;
  1752.         (**w_objs_hndl).bg_object[6]._3dPtH_BG[1].y_point = 200;
  1753.         (**w_objs_hndl).bg_object[6]._3dPtH_BG[1].z_point = 120;
  1754.         
  1755.         (**w_objs_hndl).bg_object[6]._3dPtH_BG[2].x_point = 140;
  1756.         (**w_objs_hndl).bg_object[6]._3dPtH_BG[2].y_point = 200;
  1757.         (**w_objs_hndl).bg_object[6]._3dPtH_BG[2].z_point = 80;
  1758.  
  1759.         (**w_objs_hndl).bg_object[6]._3dPtH_BG[3].x_point = 100;
  1760.         (**w_objs_hndl).bg_object[6]._3dPtH_BG[3].y_point = 200;
  1761.         (**w_objs_hndl).bg_object[6]._3dPtH_BG[3].z_point = 80;
  1762.  
  1763.         (**w_objs_hndl).bg_object[6]._3dPtH_BG[4].x_point = 100;
  1764.         (**w_objs_hndl).bg_object[6]._3dPtH_BG[4].y_point = 160;
  1765.         (**w_objs_hndl).bg_object[6]._3dPtH_BG[4].z_point = 120;
  1766.  
  1767.         (**w_objs_hndl).bg_object[6]._3dPtH_BG[5].x_point = 140;
  1768.         (**w_objs_hndl).bg_object[6]._3dPtH_BG[5].y_point = 150;
  1769.         (**w_objs_hndl).bg_object[6]._3dPtH_BG[5].z_point = 120;
  1770.  
  1771.         (**w_objs_hndl).bg_object[6]._3dPtH_BG[6].x_point = 140;
  1772.         (**w_objs_hndl).bg_object[6]._3dPtH_BG[6].y_point = 160;
  1773.         (**w_objs_hndl).bg_object[6]._3dPtH_BG[6].z_point = 80;
  1774.  
  1775.         (**w_objs_hndl).bg_object[6]._3dPtH_BG[7].x_point = 100;
  1776.         (**w_objs_hndl).bg_object[6]._3dPtH_BG[7].y_point = 170;
  1777.         (**w_objs_hndl).bg_object[6]._3dPtH_BG[7].z_point = 80;
  1778.  
  1779.  
  1780.         (**w_objs_hndl).bg_object[7]._3dPtH_BG[0].x_point = 160;    /*    second cube    */
  1781.         (**w_objs_hndl).bg_object[7]._3dPtH_BG[0].y_point = 200;
  1782.         (**w_objs_hndl).bg_object[7]._3dPtH_BG[0].z_point = 180;
  1783.  
  1784.         (**w_objs_hndl).bg_object[7]._3dPtH_BG[1].x_point = 200;
  1785.         (**w_objs_hndl).bg_object[7]._3dPtH_BG[1].y_point = 200;
  1786.         (**w_objs_hndl).bg_object[7]._3dPtH_BG[1].z_point = 180;
  1787.  
  1788.         (**w_objs_hndl).bg_object[7]._3dPtH_BG[2].x_point = 200;
  1789.         (**w_objs_hndl).bg_object[7]._3dPtH_BG[2].y_point = 200;
  1790.         (**w_objs_hndl).bg_object[7]._3dPtH_BG[2].z_point = 140;
  1791.  
  1792.         (**w_objs_hndl).bg_object[7]._3dPtH_BG[3].x_point = 160;
  1793.         (**w_objs_hndl).bg_object[7]._3dPtH_BG[3].y_point = 200;
  1794.         (**w_objs_hndl).bg_object[7]._3dPtH_BG[3].z_point = 140;
  1795.  
  1796.         (**w_objs_hndl).bg_object[7]._3dPtH_BG[4].x_point = 160;
  1797.         (**w_objs_hndl).bg_object[7]._3dPtH_BG[4].y_point = 160;
  1798.         (**w_objs_hndl).bg_object[7]._3dPtH_BG[4].z_point = 180;
  1799.  
  1800.         (**w_objs_hndl).bg_object[7]._3dPtH_BG[5].x_point = 200;
  1801.         (**w_objs_hndl).bg_object[7]._3dPtH_BG[5].y_point = 160;
  1802.         (**w_objs_hndl).bg_object[7]._3dPtH_BG[5].z_point = 180;
  1803.  
  1804.         (**w_objs_hndl).bg_object[7]._3dPtH_BG[6].x_point = 200;
  1805.         (**w_objs_hndl).bg_object[7]._3dPtH_BG[6].y_point = 160;
  1806.         (**w_objs_hndl).bg_object[7]._3dPtH_BG[6].z_point = 140;
  1807.  
  1808.         (**w_objs_hndl).bg_object[7]._3dPtH_BG[7].x_point = 160;
  1809.         (**w_objs_hndl).bg_object[7]._3dPtH_BG[7].y_point = 160;
  1810.         (**w_objs_hndl).bg_object[7]._3dPtH_BG[7].z_point = 140;
  1811.  
  1812.  
  1813.         (**w_objs_hndl).bg_object[8]._3dPtH_BG[0].x_point = 200;    /*    third cube    */
  1814.         (**w_objs_hndl).bg_object[8]._3dPtH_BG[0].y_point = 200;
  1815.         (**w_objs_hndl).bg_object[8]._3dPtH_BG[0].z_point = -180;
  1816.  
  1817.         (**w_objs_hndl).bg_object[8]._3dPtH_BG[1].x_point = 280;
  1818.         (**w_objs_hndl).bg_object[8]._3dPtH_BG[1].y_point = 200;
  1819.         (**w_objs_hndl).bg_object[8]._3dPtH_BG[1].z_point = -180;
  1820.  
  1821.         (**w_objs_hndl).bg_object[8]._3dPtH_BG[2].x_point = 280;
  1822.         (**w_objs_hndl).bg_object[8]._3dPtH_BG[2].y_point = 200;
  1823.         (**w_objs_hndl).bg_object[8]._3dPtH_BG[2].z_point = -240;
  1824.  
  1825.         (**w_objs_hndl).bg_object[8]._3dPtH_BG[3].x_point = 200;
  1826.         (**w_objs_hndl).bg_object[8]._3dPtH_BG[3].y_point = 200;
  1827.         (**w_objs_hndl).bg_object[8]._3dPtH_BG[3].z_point = -240;
  1828.  
  1829.         (**w_objs_hndl).bg_object[8]._3dPtH_BG[4].x_point = 200;
  1830.         (**w_objs_hndl).bg_object[8]._3dPtH_BG[4].y_point = 160;
  1831.         (**w_objs_hndl).bg_object[8]._3dPtH_BG[4].z_point = -180;
  1832.  
  1833.         (**w_objs_hndl).bg_object[8]._3dPtH_BG[5].x_point = 280;
  1834.         (**w_objs_hndl).bg_object[8]._3dPtH_BG[5].y_point = 160;
  1835.         (**w_objs_hndl).bg_object[8]._3dPtH_BG[5].z_point = -180;
  1836.  
  1837.         (**w_objs_hndl).bg_object[8]._3dPtH_BG[6].x_point = 280;
  1838.         (**w_objs_hndl).bg_object[8]._3dPtH_BG[6].y_point = 160;
  1839.         (**w_objs_hndl).bg_object[8]._3dPtH_BG[6].z_point = -240;
  1840.  
  1841.         (**w_objs_hndl).bg_object[8]._3dPtH_BG[7].x_point = 200;
  1842.         (**w_objs_hndl).bg_object[8]._3dPtH_BG[7].y_point = 160;
  1843.         (**w_objs_hndl).bg_object[8]._3dPtH_BG[7].z_point = -240;
  1844.  
  1845.  
  1846.         (**w_objs_hndl).bg_object[9]._3dPtH_BG[0].x_point = 300;    /*    fourth cube    */
  1847.         (**w_objs_hndl).bg_object[9]._3dPtH_BG[0].y_point = 200;
  1848.         (**w_objs_hndl).bg_object[9]._3dPtH_BG[0].z_point = -480;
  1849.  
  1850.         (**w_objs_hndl).bg_object[9]._3dPtH_BG[1].x_point = 380;
  1851.         (**w_objs_hndl).bg_object[9]._3dPtH_BG[1].y_point = 200;
  1852.         (**w_objs_hndl).bg_object[9]._3dPtH_BG[1].z_point = -480;
  1853.  
  1854.         (**w_objs_hndl).bg_object[9]._3dPtH_BG[2].x_point = 380;
  1855.         (**w_objs_hndl).bg_object[9]._3dPtH_BG[2].y_point = 200;
  1856.         (**w_objs_hndl).bg_object[9]._3dPtH_BG[2].z_point = -540;
  1857.  
  1858.         (**w_objs_hndl).bg_object[9]._3dPtH_BG[3].x_point = 300;
  1859.         (**w_objs_hndl).bg_object[9]._3dPtH_BG[3].y_point = 200;
  1860.         (**w_objs_hndl).bg_object[9]._3dPtH_BG[3].z_point = -540;
  1861.  
  1862.         (**w_objs_hndl).bg_object[9]._3dPtH_BG[4].x_point = 300;
  1863.         (**w_objs_hndl).bg_object[9]._3dPtH_BG[4].y_point = 160;
  1864.         (**w_objs_hndl).bg_object[9]._3dPtH_BG[4].z_point = -480;
  1865.  
  1866.         (**w_objs_hndl).bg_object[9]._3dPtH_BG[5].x_point = 380;
  1867.         (**w_objs_hndl).bg_object[9]._3dPtH_BG[5].y_point = 160;
  1868.         (**w_objs_hndl).bg_object[9]._3dPtH_BG[5].z_point = -480;
  1869.  
  1870.         (**w_objs_hndl).bg_object[9]._3dPtH_BG[6].x_point = 380;
  1871.         (**w_objs_hndl).bg_object[9]._3dPtH_BG[6].y_point = 160;
  1872.         (**w_objs_hndl).bg_object[9]._3dPtH_BG[6].z_point = -540;
  1873.  
  1874.         (**w_objs_hndl).bg_object[9]._3dPtH_BG[7].x_point = 300;
  1875.         (**w_objs_hndl).bg_object[9]._3dPtH_BG[7].y_point = 160;
  1876.         (**w_objs_hndl).bg_object[9]._3dPtH_BG[7].z_point = -540;
  1877.  
  1878.  
  1879.         (**w_objs_hndl).bg_object[10]._3dPtH_BG[0].x_point = 490;        /*    first triangle    */
  1880.         (**w_objs_hndl).bg_object[10]._3dPtH_BG[0].y_point = 200;
  1881.         (**w_objs_hndl).bg_object[10]._3dPtH_BG[0].z_point = 200;
  1882.  
  1883.         (**w_objs_hndl).bg_object[10]._3dPtH_BG[1].x_point = 690;
  1884.         (**w_objs_hndl).bg_object[10]._3dPtH_BG[1].y_point = 200;
  1885.         (**w_objs_hndl).bg_object[10]._3dPtH_BG[1].z_point = 200;
  1886.         
  1887.         (**w_objs_hndl).bg_object[10]._3dPtH_BG[2].x_point = 590;
  1888.         (**w_objs_hndl).bg_object[10]._3dPtH_BG[2].y_point = 200;
  1889.         (**w_objs_hndl).bg_object[10]._3dPtH_BG[2].z_point = 30;
  1890.         
  1891.  
  1892.         (**w_objs_hndl).bg_object[11]._3dPtH_BG[0].x_point = 10;        /*    second triangle    */
  1893.         (**w_objs_hndl).bg_object[11]._3dPtH_BG[0].y_point = 200;
  1894.         (**w_objs_hndl).bg_object[11]._3dPtH_BG[0].z_point = 200;
  1895.         
  1896.         (**w_objs_hndl).bg_object[11]._3dPtH_BG[1].x_point = 210;
  1897.         (**w_objs_hndl).bg_object[11]._3dPtH_BG[1].y_point = 200;
  1898.         (**w_objs_hndl).bg_object[11]._3dPtH_BG[1].z_point = 200;
  1899.  
  1900.         (**w_objs_hndl).bg_object[11]._3dPtH_BG[2].x_point = 110;
  1901.         (**w_objs_hndl).bg_object[11]._3dPtH_BG[2].y_point = 200;
  1902.         (**w_objs_hndl).bg_object[11]._3dPtH_BG[2].z_point = 30;
  1903.  
  1904.  
  1905.         (**w_objs_hndl).bg_object[12]._3dPtH_BG[0].x_point = 250;            /*    third triangle    */
  1906.         (**w_objs_hndl).bg_object[12]._3dPtH_BG[0].y_point = 200;
  1907.         (**w_objs_hndl).bg_object[12]._3dPtH_BG[0].z_point = 200;
  1908.  
  1909.         (**w_objs_hndl).bg_object[12]._3dPtH_BG[1].x_point = 450;
  1910.         (**w_objs_hndl).bg_object[12]._3dPtH_BG[1].y_point = 200;
  1911.         (**w_objs_hndl).bg_object[12]._3dPtH_BG[1].z_point = 200;
  1912.  
  1913.         (**w_objs_hndl).bg_object[12]._3dPtH_BG[2].x_point = 350;
  1914.         (**w_objs_hndl).bg_object[12]._3dPtH_BG[2].y_point = 200;
  1915.         (**w_objs_hndl).bg_object[12]._3dPtH_BG[2].z_point = 30;
  1916.  
  1917.  
  1918.         (**w_objs_hndl).bg_object[13]._3dPtH_BG[0].x_point = 490;        /*    fourth triangle    */
  1919.         (**w_objs_hndl).bg_object[13]._3dPtH_BG[0].y_point = 200;
  1920.         (**w_objs_hndl).bg_object[13]._3dPtH_BG[0].z_point = -30;
  1921.  
  1922.         (**w_objs_hndl).bg_object[13]._3dPtH_BG[1].x_point = 690;
  1923.         (**w_objs_hndl).bg_object[13]._3dPtH_BG[1].y_point = 200;
  1924.         (**w_objs_hndl).bg_object[13]._3dPtH_BG[1].z_point = -30;
  1925.  
  1926.         (**w_objs_hndl).bg_object[13]._3dPtH_BG[2].x_point = 590;
  1927.         (**w_objs_hndl).bg_object[13]._3dPtH_BG[2].y_point = 200;
  1928.         (**w_objs_hndl).bg_object[13]._3dPtH_BG[2].z_point = -200;
  1929.  
  1930.  
  1931.         (**w_objs_hndl).bg_object[14]._3dPtH_BG[0].x_point = 10;            /*    fifth triangle    */
  1932.         (**w_objs_hndl).bg_object[14]._3dPtH_BG[0].y_point = 200;
  1933.         (**w_objs_hndl).bg_object[14]._3dPtH_BG[0].z_point = -30;
  1934.  
  1935.         (**w_objs_hndl).bg_object[14]._3dPtH_BG[1].x_point = 210;
  1936.         (**w_objs_hndl).bg_object[14]._3dPtH_BG[1].y_point = 200;
  1937.         (**w_objs_hndl).bg_object[14]._3dPtH_BG[1].z_point = -30;
  1938.  
  1939.         (**w_objs_hndl).bg_object[14]._3dPtH_BG[2].x_point = 110;
  1940.         (**w_objs_hndl).bg_object[14]._3dPtH_BG[2].y_point = 200;
  1941.         (**w_objs_hndl).bg_object[14]._3dPtH_BG[2].z_point = -200;
  1942.  
  1943.  
  1944.         (**w_objs_hndl).bg_object[15]._3dPtH_BG[0].x_point = 250;            /*    sixth triangle    */
  1945.         (**w_objs_hndl).bg_object[15]._3dPtH_BG[0].y_point = 200;
  1946.         (**w_objs_hndl).bg_object[15]._3dPtH_BG[0].z_point = -30;
  1947.  
  1948.         (**w_objs_hndl).bg_object[15]._3dPtH_BG[1].x_point = 450;
  1949.         (**w_objs_hndl).bg_object[15]._3dPtH_BG[1].y_point = 200;
  1950.         (**w_objs_hndl).bg_object[15]._3dPtH_BG[1].z_point = -30;
  1951.  
  1952.         (**w_objs_hndl).bg_object[15]._3dPtH_BG[2].x_point = 350;
  1953.         (**w_objs_hndl).bg_object[15]._3dPtH_BG[2].y_point = 200;
  1954.         (**w_objs_hndl).bg_object[15]._3dPtH_BG[2].z_point = -200;
  1955.         
  1956.         if(type == T_BACKGRND_OBJ)    limit = 21;
  1957.         else    limit = 15;
  1958.         
  1959.         /** initialize rotation history matrix **/        
  1960.         for(m = 0;m <= limit;m++)
  1961.         {
  1962.             for(i = 0;i <= 3;i++)
  1963.             {
  1964.                 for(j = 0;j <= 3;j++)
  1965.                 {
  1966.                     if(i == j)
  1967.                     {
  1968.                         (**w_objs_hndl).bg_object[m].rotHist[i][j].rotElem = 1;
  1969.                     }
  1970.                     else
  1971.                     {
  1972.                         (**w_objs_hndl).bg_object[m].rotHist[i][j].rotElem = 0;
  1973.                     }    
  1974.                 }
  1975.             }
  1976.         }
  1977.     }    
  1978.  
  1979. /*************************    Draw the new object            *************************/
  1980.     
  1981.     draw_object(wPtr, n, spec);    /* located in calc_update.c    */
  1982.     
  1983.     return;
  1984.     
  1985.     
  1986. }  /*  end of "create_new_object()"    */
  1987.  
  1988.  
  1989.  
  1990.  
  1991.  
  1992. /*****************************************************************/
  1993. /*  D E S E L E C T  O B J E C T S  -   unselect or delete selected objects
  1994. /*****************************************************************/
  1995.  
  1996. /**
  1997.     This routine will search the list of objects in the window to clear from the 
  1998.     screen and optionally delete from the list any "selected" objects.
  1999. **/
  2000.     
  2001.     
  2002. void deselect_objects(WindowPtr wPtr,Boolean delete_obj)
  2003. {
  2004.     short        n;
  2005.     WObjsHandle    w_objs_hndl;
  2006.  
  2007.     
  2008.  
  2009. /*********    Search object list for "selected" items.  De-select    & delete    **********/
  2010.  
  2011.  
  2012.     w_objs_hndl = (WObjsHandle)GetWRefCon(wPtr);
  2013.     
  2014.     for(n = 0; n < MAX_OBJECTS; n++)    
  2015.     {
  2016.         if((**w_objs_hndl).object[n].selected)
  2017.         {
  2018.             (**w_objs_hndl).object[n].selected = FALSE;
  2019.             if(delete_obj) (**w_objs_hndl).object[n].type = NO_OBJ;
  2020.             
  2021.             inval_object(wPtr, n);            /*  have update routine to re-draw it    */
  2022.         }
  2023.     }
  2024.     
  2025. }  /*  end of deselect_objects()    **/
  2026.  
  2027.  
  2028.  
  2029.  
  2030.  
  2031. /*****************************************************************/
  2032. /*  P O I N T  I N  O B J E C T   -   is the specified point within an object?
  2033. /*****************************************************************/
  2034.  
  2035. /**
  2036.     This routine searches down the list of objects in the window until it finds
  2037.     one whose framing rectangle includes the point specified.  (typically a
  2038.     mouse-down point).  
  2039.     
  2040.     Priority (that which will appear to be "in front" of other objects) is given to 
  2041.     more recent objects, with first priority being for points that fall within
  2042.     the "grow box" of selected items.  Second is for points within selected objects
  2043.     in general, and third is to points within any object.  After that, the point is
  2044.     considered not in an object.
  2045.     
  2046.     The function returns the index to the object found, and a code value for the
  2047.     function result:   find_code = 0  =>  no object
  2048.                                 = 1  =>  in a non-selected object
  2049.                                 = 2  =>  in a selected object
  2050.                                 = 3  =>  in a selected object's grow-box
  2051.     
  2052.     
  2053. **/
  2054.     
  2055.     
  2056. short  point_in_object(WObjsHandle w_objs_hndl, Point the_point,short *n)
  2057. {
  2058.     short        index, find_code;
  2059.     short        grow_index, select_index, object_index;
  2060.     Point        offset;
  2061.     Rect        grow_rect, object_rect;
  2062.     objectDescr    the_object;
  2063.  
  2064.  
  2065.     offset   = (**w_objs_hndl).scrollAmount;            
  2066.     
  2067.  
  2068. /******    Search the objects list for growboxes, selected objects & others    ******/
  2069.  
  2070.  
  2071.     grow_index = -1;        /*  (index = 0 is a valid possible result)    */
  2072.     select_index = -1;
  2073.     object_index = -1;
  2074.     
  2075.     for( index = 0; index < MAX_OBJECTS; index++)    
  2076.     {
  2077.         the_object = (**w_objs_hndl).object[index];
  2078.         
  2079.         if(the_object.type != NO_OBJ)
  2080.         {
  2081.             object_rect = the_object.bounds;
  2082.             OffsetRect(&object_rect, -offset.h, -offset.v);
  2083.  
  2084.             if( PtInRect(the_point, &object_rect)) 
  2085.             {
  2086.                 object_index = index;
  2087.             
  2088.                 if(the_object.selected) 
  2089.                 {
  2090.                     select_index = index;
  2091.                     
  2092.                     SetRect(&grow_rect,                    /* set up grow-box rectangle    */
  2093.                         the_object.bounds.right  - 5,
  2094.                         the_object.bounds.bottom - 5,
  2095.                         the_object.bounds.right,
  2096.                         the_object.bounds.bottom);
  2097.                         
  2098.                     OffsetRect(&grow_rect, -offset.h, -offset.v);
  2099.  
  2100.                     if( PtInRect(the_point,&grow_rect)) grow_index = index;
  2101.                     
  2102.                 }  /* end of object is selected    */
  2103.                 
  2104.             }  /*  end of point somewhere in object    */
  2105.                 
  2106.         }  /* end of  if(the_object.type != NO_OBJ)    */
  2107.         
  2108.     }  /*  end of search loop    */
  2109.     
  2110.     
  2111.     find_code = NO_OBJ;
  2112.     *n = 0;
  2113.     
  2114.     if (object_index != -1) 
  2115.     {
  2116.         *n = object_index;
  2117.         find_code = NON_SELECTED;
  2118.     }
  2119.     
  2120.     if(select_index != -1) 
  2121.     {
  2122.         *n = select_index;
  2123.         find_code = SELECTED;
  2124.     }
  2125.     
  2126.     if(grow_index != -1 ) 
  2127.     {
  2128.         *n = grow_index;
  2129.         find_code = GROW_BOX;
  2130.     }
  2131.     
  2132.     return(find_code);
  2133.     
  2134.     
  2135. }  /*  end of point_in_object()    */
  2136.  
  2137.  
  2138.  
  2139.  
  2140.  
  2141. /*****************************************************************/
  2142. /*  D O  R U B B E R  R E C T   -  draw the selection rectangle
  2143. /*****************************************************************/
  2144.  
  2145. Boolean    do_rubber_rect(Point old_pt,Rect *rubrband_rect)
  2146. {
  2147.     long        dummy;
  2148.     Point        mouse_pt;
  2149.     PenState    pen_state;
  2150.     Rect        old_rect, new_rect;
  2151.     Boolean        drew_rbr_rect = FALSE;
  2152.  
  2153.  
  2154.     GetPenState (&pen_state);
  2155.     PenNormal();
  2156.     
  2157.     PenMode(patXor);
  2158.     //PenPat((PatPtr)gray);
  2159.     PenPat(&qd.gray);
  2160.         
  2161.     while(StillDown())
  2162.     {
  2163.         GetMouse (&mouse_pt);
  2164.         
  2165.         if(drew_rbr_rect) FrameRect(&old_rect);
  2166.             
  2167.         Pt2Rect(old_pt, mouse_pt, &new_rect);
  2168.         FrameRect(&new_rect);
  2169.         drew_rbr_rect = TRUE;
  2170.  
  2171.         old_rect = new_rect;
  2172.         Delay(2L, &dummy);
  2173.     }
  2174.     
  2175.     if(drew_rbr_rect) FrameRect(&new_rect);
  2176.     
  2177.     *rubrband_rect = new_rect;    
  2178.     SetPenState (&pen_state);
  2179.  
  2180.     return(drew_rbr_rect);
  2181.     
  2182. }  /*  end of do_rubber_rect()    */
  2183.  
  2184.  
  2185.  
  2186.  
  2187.  
  2188. /*****************************************************************/
  2189. /*  S E L E C T  G R O U P   -  find objects within selection rectangle & set "selected"
  2190. /*****************************************************************/
  2191.  
  2192. void select_group(WindowPtr    wPtr,Rect *selectn_rect)
  2193. {
  2194.     short        index;
  2195.     Point        offset;
  2196.     Rect        object_rect, dummy_rect;
  2197.     WObjsHandle    w_objs_hndl;
  2198.     objectDescr    the_object;
  2199.     
  2200.     
  2201.  
  2202. /******    Search the window objects list for objects within selectn_rect    ******/
  2203.  
  2204.     
  2205.     w_objs_hndl = (WObjsHandle)GetWRefCon(wPtr);
  2206.     offset   = (**w_objs_hndl).scrollAmount;            
  2207.  
  2208.     for( index = 0; index < MAX_OBJECTS; index++)    
  2209.     {
  2210.         the_object = (**w_objs_hndl).object[index];
  2211.         
  2212.         if(the_object.type != NO_OBJ)
  2213.         {
  2214.             object_rect = the_object.bounds;
  2215.             OffsetRect(&object_rect, -offset.h, -offset.v);
  2216.  
  2217.                if( SectRect(&object_rect, selectn_rect, &dummy_rect) &&
  2218.                     EqualRect(&object_rect, &dummy_rect) )
  2219.             {
  2220.                 (**w_objs_hndl).object[index].selected = true;
  2221.                 inval_object(wPtr, index);
  2222.             }
  2223.                                 
  2224.         }
  2225.     
  2226.     }    
  2227.     
  2228. }  /*  end of select_group()    */
  2229.  
  2230.  
  2231.  
  2232.     
  2233.  
  2234.  
  2235. /*****************************************************************/
  2236. /*  M O V E  O B J E C T S   -   track the mouse as objects move
  2237. /*****************************************************************/
  2238.  
  2239. /**
  2240.     This routine will outline the selected objects and track mouse movement
  2241.     with this outline.  When the mouse is let up, the selected objects will
  2242.     be deleted from their old position and re-drawn in the new position.
  2243.     
  2244.     It ia assumed that the port and cliiping region have been properly set up
  2245.     by the calling routine.
  2246. **/
  2247.     
  2248.     
  2249. void move_objects (WindowPtr wPtr,Point mouse_pt)
  2250. {
  2251.     short        n,i,j,k;
  2252.     short        limit;
  2253.     Point        delta;
  2254.     Rect        object_rect;
  2255.     WObjsHandle    w_objs_hndl;
  2256.     Boolean        spec;
  2257.     double_t        transMat[4][4];
  2258.     double_t        rTransMat[4][4];
  2259.     double_t        vector[4];
  2260.     double_t        newVect[4];
  2261.     
  2262.     spec = FALSE;
  2263.  
  2264.     w_objs_hndl = (WObjsHandle)GetWRefCon(wPtr);
  2265.  
  2266.     draw_move_frames(w_objs_hndl, mouse_pt, &delta);
  2267.     
  2268.     for(i = 0;i <= 3;i++)    /*    initialize transMat    */
  2269.     {
  2270.         for(j = 0;j <= 3;j++)
  2271.         {
  2272.             if(i == j)
  2273.             {
  2274.                 transMat[i][j] = 1;
  2275.             }
  2276.             else
  2277.             {
  2278.                 transMat[i][j] = 0;
  2279.             }
  2280.         }
  2281.     }
  2282.  
  2283.     transMat[0][3] = delta.h;
  2284.     transMat[1][3] = delta.v;        
  2285. /***
  2286.  
  2287.     Go through the list of objects in the window.  If an object is "selected", then
  2288.     remove it from the screen with a call to "inval_object(), then re-position it 
  2289.     with a moved location.  Then go draw it.
  2290.     
  2291.     The 'effective' move value ("net_move") contains the effective amount to
  2292.     move the objects in the window.
  2293.     
  2294. ***/
  2295.     
  2296.     for(n = 0; n < MAX_OBJECTS; n++)    
  2297.     {
  2298.         if((**w_objs_hndl).object[n].selected)
  2299.         {
  2300.             inval_object(wPtr, n);
  2301.             
  2302.             object_rect = (**w_objs_hndl).object[n].bounds;
  2303.             OffsetRect(&object_rect, delta.h, delta.v);
  2304.             (**w_objs_hndl).object[n].bounds = object_rect;
  2305.             InvalRect(&object_rect);
  2306.             if((**w_objs_hndl).object[n].type == CUBE_OBJ || (**w_objs_hndl).object[n].type == HOUSE_OBJ)
  2307.             {
  2308.                 if    (    (**w_objs_hndl).object[n].type == HOUSE_OBJ &&
  2309.                         (**w_objs_hndl).object[n].armed == TRUE &&
  2310.                         (**w_objs_hndl).armament_type >= 1
  2311.                     )
  2312.                 {
  2313.                     InvalRect(&(**w_objs_hndl).object[n].mStruct[0].mRect);
  2314.                     InvalRect(&(**w_objs_hndl).object[n].mStruct[1].mRect);
  2315.                     InvalRect(&(**w_objs_hndl).object[n].mStruct[2].mRect);
  2316.                     InvalRect(&(**w_objs_hndl).object[n].mStruct[3].mRect);
  2317.                     InvalRect(&(**w_objs_hndl).object[n].mStruct[4].mRect);
  2318.                     InvalRect(&(**w_objs_hndl).object[n].mStruct[5].mRect);
  2319.                     InvalRect(&(**w_objs_hndl).object[n].mStruct[6].mRect);
  2320.                     InvalRect(&(**w_objs_hndl).object[n].mStruct[7].mRect);
  2321.                     InvalRect(&(**w_objs_hndl).object[n].mStruct[8].mRect);
  2322.                     InvalRect(&(**w_objs_hndl).object[n].mStruct[9].mRect);
  2323.                     InvalRect(&(**w_objs_hndl).object[n].mStruct[10].mRect);
  2324.                     InvalRect(&(**w_objs_hndl).object[n].mStruct[11].mRect);
  2325.                     InvalRect(&(**w_objs_hndl).object[n].mStruct[12].mRect);
  2326.                     InvalRect(&(**w_objs_hndl).object[n].mStruct[13].mRect);                
  2327.                 }
  2328.                 
  2329.                 for(i = 0;i <= 3;i++)        /* initialize rTransMat */
  2330.                 {
  2331.                     for(j = 0;j <= 3;j++)
  2332.                     {
  2333.                         rTransMat[i][j] = 0;
  2334.                     }
  2335.                 }
  2336.                 for(i = 0;i <= 3;i++)
  2337.                 {
  2338.                     for(j = 0;j <= 3;j++)
  2339.                     {
  2340.                         for(k = 0;k <= 3;k++)
  2341.                         {
  2342.                             rTransMat[i][j] += transMat[i][k] * (**w_objs_hndl).object[n].rotHist[k][j].rotElem;
  2343.                         }
  2344.                     }
  2345.                 }
  2346.                 for(i = 0;i <= 3;i++)        /* update rotHist */
  2347.                 {
  2348.                     for(j = 0;j <= 3;j++)
  2349.                     {
  2350.                         (**w_objs_hndl).object[n].rotHist[i][j].rotElem = rTransMat[i][j];
  2351.                     }
  2352.                 }
  2353.                 /*********************** update _3dPt[i] ***********************/
  2354.                 switch((**w_objs_hndl).object[n].type)
  2355.                 {
  2356.                     case 4:
  2357.                         limit = 7;
  2358.                         break;
  2359.                     case 5:
  2360.                         if((**w_objs_hndl).object[n].armed == TRUE)    limit = 21;
  2361.                         else    limit = 17;
  2362.                         break;
  2363.                 }
  2364.                 for(i = 0; i <= limit; i++)
  2365.                 {
  2366.                     vector[0] = (**w_objs_hndl).object[n]._3dPtH[i].x_point;
  2367.                     vector[1] = (**w_objs_hndl).object[n]._3dPtH[i].y_point;
  2368.                     vector[2] = (**w_objs_hndl).object[n]._3dPtH[i].z_point;
  2369.                     vector[3] = 1;
  2370.     
  2371.     
  2372.                     for(j = 0;j<=3;j++)
  2373.                     {
  2374.                         newVect[j] = 0;
  2375.                     }
  2376.                     for(j = 0;j <= 3;j++)    /*    row of matrix    */
  2377.                     {
  2378.                         for(k = 0;k <= 3;k++)
  2379.                         {
  2380.                             newVect[j] += (**w_objs_hndl).object[n].rotHist[j][k].rotElem * vector[k];
  2381.                         }
  2382.                     }
  2383.                     for(j = 0;j<=3;j++)
  2384.                     {
  2385.                         vector[j] = newVect[j];
  2386.                     }
  2387.                     (**w_objs_hndl).object[n]._3dPt[i].x_point = ceil(vector[0]);
  2388.                     (**w_objs_hndl).object[n]._3dPt[i].y_point = ceil(vector[1]);
  2389.                     (**w_objs_hndl).object[n]._3dPt[i].z_point = ceil(vector[2]);
  2390.                 }
  2391.                 
  2392.                 /******************* end of update _3dPt[i] ********************/
  2393.             }
  2394.             /*do_update(wPtr);*/
  2395.             draw_object(wPtr, n, spec);    /*    in calc_update.c    */
  2396.         }
  2397.         
  2398.     }
  2399.         
  2400.     return;
  2401.  
  2402. }  /*  end of  move_objects()    */
  2403.  
  2404.  
  2405.  
  2406.  
  2407.  
  2408. /*****************************************************************/
  2409. /*  G R O W  O B J E C T S   -   track the mouse as objects grow
  2410. /*****************************************************************/
  2411.  
  2412. /**
  2413.     This routine is called when the mouse is clicked in the grow-box of a
  2414.     previously selected object.  It tracks the mouse and draws for each selected
  2415.     object it's new shape based on the current position of the mouse.  When the
  2416.     mouse button is let up, the original objects are erased and then redrawn
  2417.     in their new size.
  2418.     
  2419.     This routine assumes that the port has been set up properly prior to call.
  2420. **/
  2421.     
  2422.     
  2423. void grow_objects(WindowPtr wPtr,Point mouse_pt)
  2424. {    
  2425.     short        n;
  2426.     Point        upper_left, lowr_right, delta;
  2427.     Rect        object_rect, temp_rect, doc_rect;
  2428.     WObjsHandle    w_objs_hndl;
  2429.     Boolean        spec;
  2430.     
  2431.     spec = FALSE;
  2432.     
  2433.     w_objs_hndl = (WObjsHandle)GetWRefCon(wPtr);
  2434.     
  2435.     draw_grow_frames(w_objs_hndl, mouse_pt, &delta);
  2436.     
  2437. /***
  2438.     Go through the list of objects in the window.  If an object is "selected", then
  2439.     remove it from the screen with a call to "inval_object(), then re-position it 
  2440.     with a moved location.  Then go draw it.
  2441.     
  2442.     The 'effective' move value ("net_move") contains the effective amount to
  2443.     move the objects in the window.
  2444. ***/    
  2445.     
  2446.     SetRect(&doc_rect, 0, 0, (**w_objs_hndl).hDocLimit, (**w_objs_hndl).vDocLimit);
  2447.  
  2448.     for(n = 0; n < MAX_OBJECTS; n++)    
  2449.     {
  2450.         if((**w_objs_hndl).object[n].selected)
  2451.         {
  2452.             inval_object(wPtr, n);                      /* erase the object from screen */
  2453.             
  2454.             object_rect = (**w_objs_hndl).object[n].bounds;            
  2455.             
  2456.             SetPt(&upper_left,     object_rect.left, object_rect.top);
  2457.             SetPt(&lowr_right,  object_rect.right, object_rect.bottom);
  2458.             
  2459.             AddPt(delta, &lowr_right);    /* delta is the net resultant mouse motion    */            
  2460.  
  2461.             Pt2Rect(upper_left, lowr_right, &temp_rect);
  2462.                                         
  2463.             if (temp_rect.left   < doc_rect.left  ) temp_rect.left   = doc_rect.left;
  2464.             if (temp_rect.top    < doc_rect.top   ) temp_rect.top    = doc_rect.top;
  2465.             if (temp_rect.right  > doc_rect.right ) temp_rect.right  = doc_rect.right;
  2466.             if (temp_rect.bottom > doc_rect.bottom) temp_rect.bottom = doc_rect.bottom;
  2467.  
  2468.             (**w_objs_hndl).object[n].bounds = temp_rect;        /* restore the object    */
  2469.                         
  2470.             draw_object(wPtr, n, spec);    /*    located in calc_update.c    */
  2471.         }
  2472.         
  2473.     }
  2474.         
  2475.     return;
  2476.     
  2477. }  /*  end of  grow_objects()    */
  2478.  
  2479.  
  2480.  
  2481.  
  2482.  
  2483. /*****************************************************************/
  2484. /*  D R A W  M O V E  F R A M E S   -  draw frames around selected objects for moving
  2485. /*****************************************************************/
  2486.  
  2487. void draw_move_frames (WObjsHandle w_objs_hndl,Point mouse_pt,Point *net_move)
  2488. /*    Point *net_move;      NOTE: this is a pointer to a point, NOT a point!    */
  2489. {
  2490.     short        n;    
  2491.     Point        old_point, new_point, delta, offset;
  2492.     Rect        object_rect, rgn_b_box, doc_rect;
  2493.     PenState    pen_state;
  2494.     RgnHandle    objs_rgn;
  2495.         
  2496.  
  2497.     offset = (**w_objs_hndl).scrollAmount;
  2498.  
  2499.     
  2500. /***
  2501.     We are going to move outlines of the selected objects around on the
  2502.     window while the user drags the mouse, then redraw the objects in their final
  2503.     position when the mouse is let up.  To quickly draw the object outlines 
  2504.     during mouse-dragging, create a "region" holding the frames of all the selected
  2505.     objects.  Then, to draw their frames, we need only do a "FrameRgn()" call, and NOT
  2506.     have to go thru the entire list looking for selected objects over and over again.
  2507. ***/
  2508.                     
  2509.  
  2510.  
  2511. /*********    Search object list for "selected" items.  Put in a temp region    **********/
  2512.  
  2513.  
  2514.     objs_rgn = NewRgn();
  2515.     OpenRgn();
  2516.     
  2517.     for(n = 0; n < MAX_OBJECTS; n++)    
  2518.     {
  2519.         if((**w_objs_hndl).object[n].selected)
  2520.         {
  2521.             object_rect = (**w_objs_hndl).object[n].bounds;
  2522.             OffsetRect(&object_rect, -offset.h, -offset.v);
  2523.  
  2524.             FrameRect(&object_rect);
  2525.         }
  2526.     }
  2527.     
  2528.     CloseRgn(objs_rgn);
  2529.     
  2530.  
  2531.  
  2532. /*********    Track the mouse with a frame of the region            **********/
  2533.  
  2534. /***    Need to maintain a "net_move" value because the objects won't
  2535.         necessarily be moved to where the mouse indicates.  For example, if
  2536.         the mouse moves beyond the borders of the document we'll want to 
  2537.         restrain placement of the objects so that they'll all stay within the
  2538.         document borders.
  2539. ***/
  2540.  
  2541.  
  2542.     GetPenState (&pen_state);        /** set up pen for eraseable frame...        */
  2543.     PenNormal();
  2544.     
  2545.     PenMode(patXor);
  2546.     //PenPat ((PatPtr)gray);
  2547.     PenPat (&qd.gray);
  2548.     PenSize(2,2);
  2549.  
  2550.     FrameRgn(objs_rgn);          /* draw initial frame                            */
  2551.     
  2552.  
  2553.  
  2554. /*********    While the user is dragging the mouse...            **********************/
  2555.  
  2556.  
  2557.     old_point = mouse_pt;
  2558.     new_point = mouse_pt;
  2559.     SetPt(net_move, 0, 0);         /* this is the 'effective' frame/mouse motion     */
  2560.     
  2561.     while (StillDown())
  2562.     {
  2563.         GetMouse(&new_point);
  2564.         
  2565.         if( (new_point.h != old_point.h)    /* don't bother unless the mouse moved    */
  2566.          || (new_point.v != old_point.v) )
  2567.          {
  2568.             delta = new_point;            /* how much did we move since last time?    */
  2569.             SubPt(old_point, &delta);
  2570.             
  2571.             FrameRgn(objs_rgn);            /*  erase previous frame  (pen mode = XOR)    */
  2572.  
  2573.             OffsetRgn(objs_rgn, delta.h, delta.v);    /* move the frame that amount    */
  2574.  
  2575.  
  2576.  
  2577. /*********    Keep the selected-items frame within document boundaries    **********/
  2578.  
  2579.  
  2580. /***  a) determine document boundary in scrolled coordinates    ***/
  2581.  
  2582.         SetRect(&doc_rect, 0, 0, (**w_objs_hndl).hDocLimit, (**w_objs_hndl).vDocLimit);
  2583.         OffsetRect(&doc_rect, -offset.h, -offset.v);
  2584.  
  2585.                 
  2586. /***  b) undo previous OffSetRect on the items-frame if we're out of bounds        ***/
  2587.         
  2588.         rgn_b_box = (**objs_rgn).rgnBBox;
  2589.  
  2590.         if( (rgn_b_box.top    < doc_rect.top   ) 
  2591.          || (rgn_b_box.bottom > doc_rect.bottom) )
  2592.         { 
  2593.              OffsetRgn(objs_rgn, 0, -delta.v);
  2594.              net_move->v = net_move->v - delta.v;
  2595.         }
  2596.              
  2597.         if( (rgn_b_box.left   < doc_rect.left )
  2598.          || (rgn_b_box.right  > doc_rect.right) )
  2599.         { 
  2600.              OffsetRgn(objs_rgn, -delta.h, 0);
  2601.              net_move->h = net_move->h - delta.h;
  2602.         }
  2603.     
  2604.  
  2605.  
  2606. /*********    Draw the NEW selected-objects frame                            **********/
  2607.  
  2608.  
  2609.             FrameRgn(objs_rgn);            /*  draw the frame in the moved position    */
  2610.  
  2611.             AddPt(delta, net_move);        /*  accumulate 'net' move                    */    
  2612.             old_point = new_point;        /*  set "old" mouse position to current pos    */    
  2613.         }
  2614.         
  2615.     }  /* end 'while'    */
  2616.     
  2617.  
  2618.  
  2619. /*********    When the mouse is let up...                                    **********/
  2620.  
  2621.  
  2622.     FrameRgn(objs_rgn);        /*  erase the most recent selected-items frame    */
  2623.     DisposeRgn(objs_rgn);
  2624.     
  2625.     SetPenState(&pen_state);
  2626.     
  2627.     return;
  2628.     
  2629. }  /*  end of  draw_move_frames()    */
  2630.  
  2631.  
  2632.  
  2633.  
  2634.  
  2635.  
  2636. /*****************************************************************/
  2637. /*  D R A W  G R O W   F R A M E S   -  track the mouse for grow_objects()
  2638. /*****************************************************************/
  2639.  
  2640. void draw_grow_frames (WObjsHandle w_objs_hndl,Point mouse_pt,Point *net_size)
  2641. /*    Point        *net_size;    /*  NOTE: this is a pointer to a point, NOT a point!    */
  2642.  
  2643. {
  2644.     short        n;    
  2645.     Point        old_point, new_point, delta;
  2646.     PenState    pen_state;
  2647.         
  2648.     
  2649. /***
  2650.     While the user holds the mouse down, track the mouse position by drawing
  2651.     frames (around selected objects) that show what size the objects will become.
  2652.     
  2653.     To track the mouse movement, we keep track of three mouse-points:
  2654.     
  2655.         - the original point that the mouse was clicked (in the grow-box of one
  2656.             of the selected objects)  "mouse_pt"
  2657.             
  2658.         - the new point that the mouse has moved to since we last looked at it
  2659.             "new_pt"
  2660.             
  2661.         - and the most recent "new_pt", called "old_pt"
  2662.         
  2663.     At each "new_pt" we draw a frame around each selected object indicating its
  2664.     new size based on mouse dragging.  We also draw a frame around each object
  2665.     based on "old_pt" and the "patXor" drawing mode causes the previous frame
  2666.     to go away.  Thus, the user sees that he is growing and shrinking the frames
  2667.     around selected objects as the mouse is dragged.
  2668. ***/
  2669.  
  2670.  
  2671.     GetPenState (&pen_state);        /** set up pen for eraseable frame...        */
  2672.     PenNormal();
  2673.     
  2674.     PenMode(patXor);
  2675.     //PenPat ((PatPtr)gray);
  2676.     PenPat (&qd.gray);
  2677.     PenSize(2,2);
  2678.  
  2679.     SetPt(&delta, 0, 0);
  2680.     size_frames(w_objs_hndl, delta);          /* draw initial frame                */
  2681.     
  2682.  
  2683.  
  2684. /*********    While the user is dragging the mouse...            **********************/
  2685.  
  2686.  
  2687.     old_point = mouse_pt;
  2688.     new_point = mouse_pt;
  2689.     SetPt(net_size, 0, 0);         /* this is the 'effective' frame/mouse motion     */
  2690.     
  2691.     while (StillDown())
  2692.     {
  2693.         GetMouse(&new_point);
  2694.         
  2695.         if( (new_point.h != old_point.h)    /* don't bother unless the mouse moved    */
  2696.          || (new_point.v != old_point.v) ) 
  2697.          {
  2698.             delta = old_point;                    /* 'erase' previous frame (redraw it)    */
  2699.             SubPt(mouse_pt, &delta);
  2700.             size_frames(w_objs_hndl, delta);
  2701.             
  2702.             delta = new_point;                    /* draw new, resized frame    */
  2703.             SubPt(mouse_pt, &delta);
  2704.             size_frames(w_objs_hndl, delta);
  2705.  
  2706.             old_point = new_point;        /*  set "old" mouse position to current pos    */    
  2707.         }
  2708.         
  2709.     }  /* end 'while'    */
  2710.     
  2711.  
  2712.  
  2713. /*********    When the mouse is let up...                                    **********/
  2714.  
  2715.  
  2716.     size_frames(w_objs_hndl, delta);        /* clear out the frames when leaving...    */
  2717.     *net_size = delta;
  2718.     
  2719.     SetPenState(&pen_state);
  2720.     
  2721.     return;
  2722.     
  2723. }  /*  end of draw_grow_frames()    */
  2724.  
  2725.  
  2726.  
  2727.  
  2728.  
  2729. /*****************************************************************/
  2730. /*  S I Z E  F R A M E S   -  reshape the frames for draw_size_frames
  2731. /*****************************************************************/
  2732.  
  2733. void size_frames (WObjsHandle w_objs_hndl,Point delta)
  2734.  
  2735. /***
  2736.  
  2737.     size_frames() assumes that all port and pen characteristics have been 
  2738.     previously set up.  Specifically, the port has been selected, clipping set up,
  2739.     the pen state saved, and the current pen set to mode patXor, size 2 x 2,
  2740.     and pattern gray.
  2741.     
  2742. ***/
  2743.  
  2744.  
  2745. {
  2746.     short    n;
  2747.     Point    upper_left, lowr_right, offset;
  2748.     Rect    object_rect, temp_rect, doc_rect;
  2749.  
  2750.  
  2751.     offset = (**w_objs_hndl).scrollAmount;
  2752.  
  2753.     SetRect(&doc_rect, 0, 0, (**w_objs_hndl).hDocLimit, (**w_objs_hndl).vDocLimit);
  2754.     OffsetRect(&doc_rect, -offset.h, -offset.v);
  2755.  
  2756.     for(n = 0; n < MAX_OBJECTS; n++)    
  2757.     {
  2758.         if((**w_objs_hndl).object[n].selected)
  2759.         {
  2760.             object_rect = (**w_objs_hndl).object[n].bounds;
  2761.             
  2762.             SetPt(&upper_left,  object_rect.left - offset.h, 
  2763.                                 object_rect.top - offset.v);
  2764.                                 
  2765.             SetPt(&lowr_right,  object_rect.right - offset.h, 
  2766.                                 object_rect.bottom - offset.v);
  2767.  
  2768.             AddPt(delta, &lowr_right);
  2769.             
  2770.             Pt2Rect(upper_left, lowr_right, &temp_rect);
  2771.                                         
  2772.             if (temp_rect.left   < doc_rect.left  ) temp_rect.left   = doc_rect.left;
  2773.             if (temp_rect.top    < doc_rect.top   ) temp_rect.top    = doc_rect.top;
  2774.             if (temp_rect.right  > doc_rect.right ) temp_rect.right  = doc_rect.right;
  2775.             if (temp_rect.bottom > doc_rect.bottom) temp_rect.bottom = doc_rect.bottom;
  2776.  
  2777.             if( (**w_objs_hndl).object[n].type == CIRCLE_OBJ )
  2778.                     FrameOval(&temp_rect);
  2779.             else  
  2780.                     FrameRect(&temp_rect);
  2781.         }
  2782.     } 
  2783.     
  2784. }  /*  end of  size_frames()    */
  2785.  
  2786.  
  2787. /*********************** do_rotate_box **************************/
  2788. void do_rotate_box(WindowPtr wPtr,EventRecord    *an_event)
  2789.                                         /* from handlemousedown gets gRotateBox if from */
  2790.                                         /* clicking on rotate button in that window        */
  2791. {
  2792.     WRObjsHandle    wr_objs_hndl;
  2793.     Point            mouse_pt;
  2794.     long            obj_type;
  2795.     //long            charCode;
  2796.     Boolean            fineMove = false;
  2797.     
  2798.     //charCode = gTheEvent.message & charCodeMask;
  2799.     if    (an_event->modifiers & cmdKey)    fineMove = true;
  2800.     SetPort(wPtr);
  2801.     wr_objs_hndl = (WRObjs**)GetWRefCon(wPtr);
  2802.     mouse_pt = an_event->where;
  2803.     GlobalToLocal( &mouse_pt );
  2804.     if( PtInRect(mouse_pt, &gRotation_frame) )
  2805.     {
  2806.         if(PtInRect(mouse_pt,&gXrotation_box))             obj_type = X_ROTATION_BOX;    /*    1    */
  2807.         
  2808.         else if(PtInRect(mouse_pt,&gYrotation_box))     obj_type = Y_ROTATION_BOX;    /*    2    */
  2809.  
  2810.         else if(PtInRect(mouse_pt,&gZrotation_box))     obj_type = Z_ROTATION_BOX;    /*    3    */
  2811.         
  2812.         else if(PtInRect(mouse_pt,&gNegXrotation_box))     obj_type = NEG_X_ROT_BOX;    /*    4    */
  2813.         
  2814.         else if(PtInRect(mouse_pt,&gNegYrotation_box))     obj_type = NEG_Y_ROT_BOX;    /*    5    */
  2815.  
  2816.         else if(PtInRect(mouse_pt,&gNegZrotation_box))     obj_type = NEG_Z_ROT_BOX;    /*    6    */
  2817.         
  2818.         (**wr_objs_hndl).paletteSetting = obj_type;
  2819.         
  2820.         do_rotation_subject(wPtr,fineMove);    /* in this file    */
  2821.     }
  2822.     else if(PtInRect(mouse_pt,&gDoManyRotation_box))
  2823.     {
  2824.         (**wr_objs_hndl).paletteSetting = DO_MANY_ROT_BOX;                            /*    12    */
  2825.         
  2826.         do_rotation_subject(wPtr,fineMove);    /* in this file    */
  2827.     }
  2828.     else if(PtInRect(mouse_pt,&gMovement_frame)    )
  2829.     {
  2830.         if(PtInRect(mouse_pt,&gDoRotateLeft_box))         obj_type = DO_ROT_LEFT_BOX;    /*    13    */
  2831.         else if(PtInRect(mouse_pt,&gDoRotateRight_box))    obj_type = DO_ROT_RT_BOX;    /*    14    */
  2832.         else if(PtInRect(mouse_pt,&gDoRotateUp_box))     obj_type = DO_ROT_UP_BOX;    /*    15    */
  2833.         else if(PtInRect(mouse_pt,&gDoRotateDown_box))     obj_type = DO_ROT_DN_BOX;    /*    16    */
  2834.         else if(PtInRect(mouse_pt,&gDoMoveIn_box))         obj_type = DO_MOVE_IN_BOX;    /*    17    */
  2835.         else if(PtInRect(mouse_pt,&gDoMoveOut_box))     obj_type = DO_MOVE_OUT_BOX;    /*    18    */
  2836.         
  2837.         (**wr_objs_hndl).paletteSetting = obj_type;
  2838.         
  2839.         do_rotation_subject(wPtr,fineMove);                            /*    this    */
  2840.         
  2841.     }
  2842.     else if(PtInRect(mouse_pt,&gPlaneControl_frame) )
  2843.     {
  2844.         if(PtInRect(mouse_pt,&gDoPitchUp_box))             obj_type = DO_PITCH_UP_BOX;    /*    19    */
  2845.         else if(PtInRect(mouse_pt,&gDoPitchDn_box))        obj_type = DO_PITCH_DN_BOX;    /*    20    */
  2846.         else if(PtInRect(mouse_pt,&gDoYawLft_box))         obj_type = DO_YAW_LFT_BOX;    /*    21    */
  2847.         else if(PtInRect(mouse_pt,&gDoYawRt_box))         obj_type = DO_YAW_RT_BOX;    /*    22    */
  2848.         else if(PtInRect(mouse_pt,&gDoBankLft_box))     obj_type = DO_BANK_LFT_BOX;    /*    23    */
  2849.         else if(PtInRect(mouse_pt,&gDoBankRt_box))         obj_type = DO_BANK_RT_BOX;    /*    24    */
  2850.         
  2851.         (**wr_objs_hndl).paletteSetting = obj_type;
  2852.         
  2853.         do_rotation_subject(wPtr,fineMove);                            /*    this    */
  2854.     }
  2855.     else
  2856.     {
  2857.         if(PtInRect(mouse_pt,&gXrot_text_box)) obj_type = X_ROT_TEXT_BOX;            /*    7    */
  2858.         
  2859.         else if(PtInRect(mouse_pt,&gYrot_text_box)) obj_type = Y_ROT_TEXT_BOX;        /*    8    */
  2860.  
  2861.         else if(PtInRect(mouse_pt,&gZrot_text_box)) obj_type = Z_ROT_TEXT_BOX;        /*    9    */
  2862.  
  2863.         else if(PtInRect(mouse_pt,&gRot_OK_box)) obj_type = ROTATION_OK_BOX;        /*    10    */
  2864.  
  2865.         else if(PtInRect(mouse_pt,&gRot_Cancel_box)) obj_type = ROT_CANCEL_BOX;        /*    11    */
  2866.  
  2867.         (**wr_objs_hndl).paletteSetting = obj_type;
  2868.         do_get_rot_text(wPtr);
  2869.     }
  2870. }
  2871.  
  2872. /*********************** do_stretch_box *************************/
  2873. void do_stretch_box(WindowPtr wPtr,EventRecord    *an_event)    /* called from calc_mousedown.c */
  2874. {
  2875.     WSObjsHandle    ws_objs_hndl;
  2876.     Point            mouse_pt;
  2877.     long            obj_type;
  2878.     
  2879.     SetPort(wPtr);
  2880.     ws_objs_hndl=(WSObjs**)GetWRefCon(wPtr);
  2881.     mouse_pt = an_event->where;
  2882.     GlobalToLocal( &mouse_pt );
  2883.     if( PtInRect(mouse_pt, &gStretch_frame) )
  2884.     {
  2885.         if(PtInRect(mouse_pt,&gXstretch_box)) obj_type = X_STRETCH_BOX;
  2886.         
  2887.         else if(PtInRect(mouse_pt,&gYstretch_box)) obj_type = Y_STRETCH_BOX;
  2888.  
  2889.         else if(PtInRect(mouse_pt,&gZstretch_box)) obj_type = Z_STRETCH_BOX;
  2890.  
  2891.         else if(PtInRect(mouse_pt,&gNegXstretch_box)) obj_type = NEG_X_STR_BOX;
  2892.         
  2893.         else if(PtInRect(mouse_pt,&gNegYstretch_box)) obj_type = NEG_Y_STR_BOX;
  2894.         
  2895.         else if(PtInRect(mouse_pt,&gNegZstretch_box)) obj_type = NEG_Z_STR_BOX;
  2896.  
  2897.         (**ws_objs_hndl).paletteSetting = obj_type;
  2898.         do_stretch_subject(wPtr);
  2899.     }
  2900.     else
  2901.     {
  2902.         if(PtInRect(mouse_pt,&gXstr_text_box)) obj_type = X_STR_TEXT_BOX;
  2903.         
  2904.         else if(PtInRect(mouse_pt,&gYstr_text_box)) obj_type = Y_STR_TEXT_BOX;
  2905.  
  2906.         else if(PtInRect(mouse_pt,&gZstr_text_box)) obj_type = Z_STR_TEXT_BOX;
  2907.  
  2908.         else if(PtInRect(mouse_pt,&gStr_OK_box)) obj_type = STRETCH_OK_BOX;
  2909.  
  2910.         else if(PtInRect(mouse_pt,&gStr_Cancel_box)) obj_type = STR_CANCEL_BOX;
  2911.         
  2912.         (**ws_objs_hndl).paletteSetting = obj_type;
  2913.         do_get_str_text(wPtr);
  2914.     }
  2915. }
  2916.  
  2917. /********************* do_rotation_subject **********************/
  2918. void    do_rotation_subject(WindowPtr wPtr,Boolean fineMove )    /* gets gRotationBox if rotate button pressed    */
  2919. {
  2920.     WRObjsHandle    wr_objs_hndl;
  2921.     long            theSetting,dummy;
  2922.     Handle            icon_hndl;
  2923.     short            i,increment;
  2924.     
  2925.     wr_objs_hndl=(WRObjs**)GetWRefCon(wPtr);
  2926.     
  2927.     EraseRect(&gRotation_frame);
  2928.     EraseRect(&gDoManyRotation_box);
  2929.     EraseRect(&gMovement_frame);
  2930.     EraseRect(&gPlaneControl_frame);
  2931.     
  2932.     theSetting = (**wr_objs_hndl).paletteSetting;
  2933.  
  2934.     if(theSetting == X_ROTATION_BOX)                                    /*    1    */
  2935.     {
  2936.         icon_hndl = GetResource('ICON', ROT_X_ID_DOWN);
  2937.         PlotIcon(&gXrotation_box, icon_hndl);
  2938.         Delay(2L, &dummy);
  2939.     }
  2940.     icon_hndl = GetResource('ICON', ROT_X_ID);
  2941.     PlotIcon(&gXrotation_box, icon_hndl);
  2942.     /***************************************************************/
  2943.     if(theSetting == Y_ROTATION_BOX)                                    /*    2    */
  2944.     {
  2945.         icon_hndl = GetResource('ICON', ROT_Y_ID_DOWN);
  2946.         PlotIcon(&gYrotation_box, icon_hndl);
  2947.         Delay(2L, &dummy);
  2948.     }
  2949.     icon_hndl = GetResource('ICON', ROT_Y_ID);
  2950.     PlotIcon(&gYrotation_box, icon_hndl);
  2951.     /***************************************************************/
  2952.     if(theSetting == Z_ROTATION_BOX)                                    /*    3    */
  2953.     {
  2954.         icon_hndl = GetResource('ICON', ROT_Z_ID_DOWN);
  2955.         PlotIcon(&gZrotation_box, icon_hndl);
  2956.         Delay(2L, &dummy);
  2957.     }
  2958.     icon_hndl = GetResource('ICON', ROT_Z_ID);
  2959.     PlotIcon(&gZrotation_box, icon_hndl);
  2960.     /***************************************************************/
  2961.     if(theSetting == NEG_X_ROT_BOX)                                        /*    4    */
  2962.     {
  2963.         icon_hndl = GetResource('ICON', NEG_ROT_X_ID_DN);
  2964.         PlotIcon(&gNegXrotation_box, icon_hndl);
  2965.         Delay(2L, &dummy);
  2966.     }
  2967.     icon_hndl = GetResource('ICON', NEG_ROT_X_ID);
  2968.     PlotIcon(&gNegXrotation_box, icon_hndl);
  2969.     /***************************************************************/
  2970.     if(theSetting == NEG_Y_ROT_BOX)                                        /*    5    */
  2971.     {
  2972.         icon_hndl = GetResource('ICON', NEG_ROT_Y_ID_DN);
  2973.         PlotIcon(&gNegYrotation_box, icon_hndl);
  2974.         Delay(2L, &dummy);
  2975.     }
  2976.     icon_hndl = GetResource('ICON', NEG_ROT_Y_ID);
  2977.     PlotIcon(&gNegYrotation_box, icon_hndl);
  2978.     /***************************************************************/
  2979.     if(theSetting == NEG_Z_ROT_BOX)                                        /*    6    */
  2980.     {
  2981.         icon_hndl = GetResource('ICON', NEG_ROT_Z_ID_DN);
  2982.         PlotIcon(&gNegZrotation_box, icon_hndl);
  2983.         Delay(2L, &dummy);
  2984.     }
  2985.     icon_hndl = GetResource('ICON', NEG_ROT_Z_ID);
  2986.     PlotIcon(&gNegZrotation_box, icon_hndl);
  2987.     /***************************************************************/
  2988.     if(theSetting == DO_MANY_ROT_BOX)                                    /*    12    */
  2989.     {
  2990.         icon_hndl = GetResource('ICON', DO_MANY_ROT_BOX_ID_DN);
  2991.         PlotIcon(&gDoManyRotation_box, icon_hndl);
  2992.         Delay(2L, &dummy);
  2993.     }
  2994.     icon_hndl = GetResource('ICON', DO_MANY_ROT_BOX_ID);
  2995.     PlotIcon(&gDoManyRotation_box, icon_hndl);
  2996.     /***************************************************************/
  2997.  
  2998.  
  2999.     if(theSetting == DO_ROT_LEFT_BOX)                                    /*    13    */
  3000.     {
  3001.         icon_hndl = GetResource('ICON', ROT_LEFT_ID_DN);
  3002.         PlotIcon(&gDoRotateLeft_box, icon_hndl);
  3003.         Delay(2L, &dummy);
  3004.     }
  3005.     icon_hndl = GetResource('ICON', ROT_LEFT_ID);
  3006.     PlotIcon(&gDoRotateLeft_box, icon_hndl);
  3007.     /***************************************************************/
  3008.     if(theSetting == DO_ROT_RT_BOX)                                        /*    14    */
  3009.     {
  3010.         icon_hndl = GetResource('ICON', ROT_RT_ID_DN);
  3011.         PlotIcon(&gDoRotateRight_box, icon_hndl);
  3012.         Delay(2L, &dummy);
  3013.     }
  3014.     icon_hndl = GetResource('ICON', ROT_RT_ID);
  3015.     PlotIcon(&gDoRotateRight_box, icon_hndl);
  3016.     /***************************************************************/
  3017.     if(theSetting == DO_ROT_UP_BOX)                                        /*    15    */
  3018.     {
  3019.         icon_hndl = GetResource('ICON', ROT_UP_ID_DN);
  3020.         PlotIcon(&gDoRotateUp_box, icon_hndl);
  3021.         Delay(2L, &dummy);
  3022.     }
  3023.     icon_hndl = GetResource('ICON', ROT_UP_ID);
  3024.     PlotIcon(&gDoRotateUp_box, icon_hndl);
  3025.     /***************************************************************/
  3026.     if(theSetting == DO_ROT_DN_BOX)                                        /*    16    */
  3027.     {
  3028.         icon_hndl = GetResource('ICON', ROT_DN_ID_DN);
  3029.         PlotIcon(&gDoRotateDown_box, icon_hndl);
  3030.         Delay(2L, &dummy);
  3031.     }
  3032.     icon_hndl = GetResource('ICON', ROT_DN_ID);
  3033.     PlotIcon(&gDoRotateDown_box, icon_hndl);
  3034.     /***************************************************************/
  3035.     if(theSetting == DO_MOVE_IN_BOX)                                    /*    17    */
  3036.     {
  3037.         icon_hndl = GetResource('ICON', MOVE_IN_ID_DN);
  3038.         PlotIcon(&gDoMoveIn_box, icon_hndl);
  3039.         Delay(2L, &dummy);
  3040.     }
  3041.     icon_hndl = GetResource('ICON', MOVE_IN_ID);
  3042.     PlotIcon(&gDoMoveIn_box, icon_hndl);
  3043.     /***************************************************************/
  3044.     if(theSetting == DO_MOVE_OUT_BOX)                                    /*    18    */
  3045.     {
  3046.         icon_hndl = GetResource('ICON', MOVE_OUT_ID_DN);
  3047.         PlotIcon(&gDoMoveOut_box, icon_hndl);
  3048.         Delay(2L, &dummy);
  3049.     }
  3050.     icon_hndl = GetResource('ICON', MOVE_OUT_ID);
  3051.     PlotIcon(&gDoMoveOut_box, icon_hndl);
  3052.     /***************************************************************/
  3053.     if(theSetting == DO_PITCH_UP_BOX)                                    /*    19    */
  3054.     {
  3055.         icon_hndl = GetResource('ICON', PITCH_UP_ID_DN);
  3056.         PlotIcon(&gDoPitchUp_box, icon_hndl);
  3057.         Delay(2L, &dummy);
  3058.     }
  3059.     icon_hndl = GetResource('ICON', PITCH_UP_ID);
  3060.     PlotIcon(&gDoPitchUp_box, icon_hndl);
  3061.     /***************************************************************/
  3062.     if(theSetting == DO_PITCH_DN_BOX)                                    /*    20    */
  3063.     {
  3064.         icon_hndl = GetResource('ICON', PITCH_DN_ID_DN);
  3065.         PlotIcon(&gDoPitchDn_box, icon_hndl);
  3066.         Delay(2L, &dummy);
  3067.     }
  3068.     icon_hndl = GetResource('ICON', PITCH_DN_ID);
  3069.     PlotIcon(&gDoPitchDn_box, icon_hndl);
  3070.     /***************************************************************/
  3071.     if(theSetting == DO_YAW_LFT_BOX)                                    /*    21    */
  3072.     {
  3073.         icon_hndl = GetResource('ICON', YAW_LFT_ID_DN);
  3074.         PlotIcon(&gDoYawLft_box, icon_hndl);
  3075.         Delay(2L, &dummy);
  3076.     }
  3077.     icon_hndl = GetResource('ICON', YAW_LFT_ID);
  3078.     PlotIcon(&gDoYawLft_box, icon_hndl);
  3079.     /***************************************************************/
  3080.     if(theSetting == DO_YAW_RT_BOX)                                    /*    22    */
  3081.     {
  3082.         icon_hndl = GetResource('ICON', YAW_RT_ID_DN);
  3083.         PlotIcon(&gDoYawRt_box, icon_hndl);
  3084.         Delay(2L, &dummy);
  3085.     }
  3086.     icon_hndl = GetResource('ICON', YAW_RT_ID);
  3087.     PlotIcon(&gDoYawRt_box, icon_hndl);
  3088.     /***************************************************************/
  3089.     if(theSetting == DO_BANK_LFT_BOX)                                    /*    23    */
  3090.     {
  3091.         icon_hndl = GetResource('ICON', BANK_LFT_ID_DN);
  3092.         PlotIcon(&gDoBankLft_box, icon_hndl);
  3093.         Delay(2L, &dummy);
  3094.     }
  3095.     icon_hndl = GetResource('ICON', BANK_LFT_ID);
  3096.     PlotIcon(&gDoBankLft_box, icon_hndl);
  3097.     /***************************************************************/
  3098.     if(theSetting == DO_BANK_RT_BOX)                                    /*    24    */
  3099.     {
  3100.         icon_hndl = GetResource('ICON',  BANK_RT_ID_DN);
  3101.         PlotIcon(&gDoBankRt_box, icon_hndl);
  3102.         Delay(2L, &dummy);
  3103.     }
  3104.     icon_hndl = GetResource('ICON',  BANK_RT_ID);
  3105.     PlotIcon(&gDoBankRt_box, icon_hndl);
  3106.     /***************************************************************/
  3107.  
  3108.     if(fineMove)    increment = 1;
  3109.     else            increment = 5;
  3110.  
  3111.     /*    insert here a call to inval_bg_object()            */
  3112.     /*    do wholesale invalidation of background objects */
  3113.  
  3114.     switch(theSetting)
  3115.     {
  3116.         case X_ROTATION_BOX:
  3117.             Do_Rotate(lastPtr,increment,0,0,FALSE);        /*    in calc_dork.c    */
  3118.             break;
  3119.         case Y_ROTATION_BOX:
  3120.             Do_Rotate(lastPtr,0,increment,0,FALSE);
  3121.             break;
  3122.         case Z_ROTATION_BOX:
  3123.             Do_Rotate(lastPtr,0,0,increment,FALSE);
  3124.             break;
  3125.         case NEG_X_ROT_BOX:
  3126.             Do_Rotate(lastPtr,-increment,0,0,FALSE);
  3127.             break;
  3128.         case NEG_Y_ROT_BOX:
  3129.             Do_Rotate(lastPtr,0,-increment,0,FALSE);
  3130.             break;
  3131.         case NEG_Z_ROT_BOX:
  3132.             Do_Rotate(lastPtr,0,0,-increment,FALSE);
  3133.             break;
  3134.         case DO_MANY_ROT_BOX:
  3135.             for(i = 0;i <= 60;i++)
  3136.             {
  3137.                 Do_Rotate(lastPtr,increment,0,0,FALSE);
  3138.                 Do_Rotate(lastPtr,0,increment,0,FALSE);
  3139.                 Do_Rotate(lastPtr,0,0,increment,FALSE);
  3140.             }
  3141.             break;
  3142.         case DO_ROT_LEFT_BOX:
  3143.             Do_Movement(lastPtr,0,increment,0,FALSE);            /*    in calc_dork.c    */
  3144.             break;
  3145.         case DO_ROT_RT_BOX:
  3146.             Do_Movement(lastPtr,0,-increment,0,FALSE);            /*    in calc_dork.c    */
  3147.             break;
  3148.         case DO_ROT_UP_BOX:
  3149.             Do_Movement(lastPtr,increment,0,0,FALSE);            /*    in calc_dork.c    */
  3150.             break;
  3151.         case DO_ROT_DN_BOX:
  3152.             Do_Movement(lastPtr,-increment,0,0,FALSE);            /*    in calc_dork.c    */
  3153.             break;
  3154.         case DO_MOVE_IN_BOX:
  3155.             Do_Translation(lastPtr,0,0,increment * 2000,FALSE);        /*    in calc_dork.c    */
  3156.             break;
  3157.         case DO_MOVE_OUT_BOX:
  3158.             Do_Translation(lastPtr,0,0,-increment * 200,FALSE);        /*    in calc_dork.c    */
  3159.             break;
  3160.         case DO_PITCH_UP_BOX:
  3161.             Do_Plane_Control(lastPtr,increment,0,0,FALSE);        /*    in calc_dork.c    */
  3162.             break;
  3163.         case DO_PITCH_DN_BOX:
  3164.             Do_Plane_Control(lastPtr,-increment,0,0,FALSE);        /*    in calc_dork.c    */
  3165.             break;
  3166.         case DO_YAW_LFT_BOX:
  3167.             Do_Plane_Control(lastPtr,0,increment,0,FALSE);        /*    in calc_dork.c    */
  3168.             break;
  3169.         case DO_YAW_RT_BOX:
  3170.             Do_Plane_Control(lastPtr,0,-increment,0,FALSE);        /*    in calc_dork.c    */
  3171.             break;
  3172.         case DO_BANK_LFT_BOX:
  3173.             Do_Plane_Control(lastPtr,0,0,increment,FALSE);        /*    in calc_dork.c    */
  3174.             break;
  3175.         case DO_BANK_RT_BOX:
  3176.             Do_Plane_Control(lastPtr,0,0,-increment,FALSE);        /*    in calc_dork.c    */
  3177.             break;
  3178.     }
  3179.     (**wr_objs_hndl).paletteSetting = 0;
  3180. }
  3181.  
  3182. /********************* do_stretch_subject ***********************/
  3183. void    do_stretch_subject(WindowPtr wPtr )
  3184. {
  3185.     Handle        icon_hndl;
  3186.     
  3187.     EraseRect(&gStretch_frame);
  3188.     
  3189.     icon_hndl = GetResource('ICON', STR_X_ID);
  3190.     PlotIcon(&gXstretch_box, icon_hndl);
  3191.  
  3192.     icon_hndl = GetResource('ICON', STR_Y_ID);
  3193.     PlotIcon(&gYstretch_box, icon_hndl);
  3194.  
  3195.     icon_hndl = GetResource('ICON', STR_Z_ID);
  3196.     PlotIcon(&gZstretch_box, icon_hndl);
  3197.  
  3198. }
  3199.  
  3200. /********************** do_get_rot_text *************************/
  3201. void    do_get_rot_text(WindowPtr    wPtr)
  3202.  
  3203. {
  3204.  
  3205. }
  3206.  
  3207. /*********************** do_get_str_text ************************/
  3208. void    do_get_str_text(WindowPtr    wPtr)
  3209. {
  3210.  
  3211. }
  3212.  
  3213. /************************** GetPoint ****************************/
  3214. void    GetPoint(short *xx,double_t *yy,double_t *zz)
  3215. {    
  3216.     long    xxx,xxxx,xxxxx;
  3217.     long    yyy,yyyy,yyyyy;
  3218.     long    zzz,zzzz,zzzzz;
  3219.     
  3220.     xxx = Random();
  3221.     xxxx = xxx * 840;
  3222.     xxxxx = xxxx/65536;
  3223.     *xx = xxxxx - 200;
  3224.     yyy = Random();
  3225.     yyyy = yyy * 100;
  3226.     yyyyy = yyyy/65536; 
  3227.     *yy = yyyyy + 100;
  3228.     zzz = Random();
  3229.     zzzz = zzz * 720;
  3230.     zzzzz = zzzz/65536;
  3231.     *zz = zzzzz - 520;
  3232. }
  3233.